﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class УправлениеЗапасами
	{
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ, ФОРМИРУЮЩИЕ ТЕКСТЫ СООБЩЕНИЙ ОБ ОШИБКАХ ПРОВЕДЕНИЯ
		// Формирует стандартный текст сообщения при ошибках проведения, когда не хватает остатка в регистре.
		//
		// Параметры:
		//  ТекстСообщения - Исходный текст выводимого сообщения.
		//  Остаток        - Текущий остаток ресурса в регистре.
		//  Требуется      - Требуемый остаток ресурса в регистре.
		//  ЕИ             - Единица измерения ресурса (единица измерения, валюта и т.д.).
		//  Отказ          - Флаг отказа в проведении докумета,
		//  Заголовок      - Заголовок начала серии сообщений об ошибках проведения (не обязательный).
		//

		public void ОшибкаНетОстатка(/*ТекстСообщения, Остаток, Требуется, ЕИ, Отказ, Заголовок=""*/)
		{
			/*ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения + Символы.ПС + Символы.Таб +
					   "Не хватает " + ?(Остаток > 0 , Требуется - Остаток, Требуется) + " " + ЕИ +
					   "; Остаток " + Остаток + " " + ЕИ +
					   "; Требуется " + Требуется + " " + ЕИ, Отказ, Заголовок);*/
		}
		// ОшибкаНетОстатка()
		// Формирует строку представления номенклатуры с учетом характеристики и серий.
		//
		// Параметры
		//  НоменклатураПредставление   - представление номенклатуры.
		//  ХарактеристикаПредставление - представление характеристики.
		//  СерияПредставление          - представление серии.
		//
		// Возвращаемое значение
		//  Строка с представлением номенклатуры.
		//

		public object ПредставлениеНоменклатуры(/*НоменклатураПредставление, ХарактеристикаПредставление = "", 
	                                 СерияПредставление = ""*/)
		{
			//СтрПредставление = """" + СокрЛП(НоменклатураПредставление) + """";
			if(true/*ЗначениеЗаполнено(ХарактеристикаПредставление)*/)
			{
				//СтрПредставление = СтрПредставление + " / """ + СокрЛП(ХарактеристикаПредставление) + """";
			}
			if(true/*ЗначениеЗаполнено(СерияПредставление)*/)
			{
				//СтрПредставление = СтрПредставление + " (""" + СокрЛП(СерияПредставление) + """)";
			}
			return null;
		}
		// ПредставлениеНоменклатуры()
		// Заполняет структуру полей стандартными для табличной части "Товары" колонками.
		//
		// Параметры:
		//  Нет.
		//
		// Возвращаемое значение:
		//  Сформированная структура.
		//

		public object СформироватьСтруктуруПолейТовары(/**/)
		{
			//СтруктураПолей = Новый Структура;
			//СтруктураПолей.Вставить("Номенклатура"              , "Номенклатура");
			//СтруктураПолей.Вставить("Количество"                , "Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент");
			//СтруктураПолей.Вставить("Сумма"                     , "Сумма");
			//СтруктураПолей.Вставить("СтавкаНДС"                 , "СтавкаНДС");
			//СтруктураПолей.Вставить("НДС"                       , "СуммаНДС");
			//СтруктураПолей.Вставить("ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры");
			//СтруктураПолей.Вставить("СерияНоменклатуры"         , "СерияНоменклатуры");
			//СтруктураПолей.Вставить("ВестиПартионныйУчетПоСериям", "Номенклатура.ВестиПартионныйУчетПоСериям");
			return null;
		}
		// СформироватьСтруктуруПолейТовары()
		// Заполняет структуру полей стандартными для табличной части "Товары" колонками,
		// обязательными к заполнению в документах.
		//
		// Параметры:
		//  Нет.
		//
		// Возвращаемое значение:
		//  Сформированная структура.
		//

		public object СформироватьСтруктуруОбязательныхПолейТовары(/**/)
		{
			return null;
		}
		// СформироватьСтруктуруОбязательныхПолейТовары()
		// Заполняет структуру полей стандартными для табличной части "Возвратная тара" колонками.
		//
		// Параметры:
		//  Нет.
		//
		// Возвращаемое значение:
		//  Сформированная структура.
		//

		public object СформироватьСтруктуруПолейТара(/**/)
		{
			//СтруктураПолей = Новый Структура;
			//СтруктураПолей.Вставить("Номенклатура"              , "Номенклатура");
			//СтруктураПолей.Вставить("Услуга"                    , "Номенклатура.Услуга");
			//СтруктураПолей.Вставить("Набор"                     , "Номенклатура.Набор");
			//СтруктураПолей.Вставить("Комплект"                  , "Номенклатура.Комплект");
			//СтруктураПолей.Вставить("ВестиУчетПоХарактеристикам", "Номенклатура.ВестиУчетПоХарактеристикам");
			//СтруктураПолей.Вставить("Количество"                , "Количество");
			//СтруктураПолей.Вставить("Сумма"                     , "Сумма");
			return null;
		}
		// СформироватьСтруктуруПолейТара()
		// Заполняет структуру полей стандартными для табличной части "Возвратная тара" колонками,
		// обязательными к заполнению в документах.
		//
		// Параметры:
		//  Нет.
		//
		// Возвращаемое значение:
		//  Сформированная структура.
		//

		public object СформироватьСтруктуруОбязательныхПолейТара(/**/)
		{
			return null;
		}
		// СформироватьСтруктуруОбязательныхПолейТара()
		// Формирует структуру дерева значений, содержащего имена полей, которые
		// нужно заполнить в запросе по шапке документа.
		//
		// Параметры:
		//  Нет.
		//
		// Возвращаемое значение:
		//  Дерево значений.
		//

		public object СформироватьДеревоПолейЗапросаПоШапке(/**/)
		{
			//ДеревоПолейЗапросаПоШапке = Новый ДеревоЗначений;
			//ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100));
			//ДеревоПолейЗапросаПоШапке.Колонки.Добавить("Объект"   , ОписаниеТиповСтрока);
			//ДеревоПолейЗапросаПоШапке.Колонки.Добавить("Поле"     , ОписаниеТиповСтрока);
			//ДеревоПолейЗапросаПоШапке.Колонки.Добавить("Псевдоним", ОписаниеТиповСтрока);
			return null;
		}
		// СформироватьДеревоПолейЗапросаПоШапке()
		// Вставляет строку в дерево полей запроса по шапке, если ее там еще нет,
		// если есть, то ничего не делает.
		//
		// Параметры:
		//  ДеревоПолейЗапросаПоШапке - дерево значений, содержащего имена полей,
		//                              которые нужно заполнить в запросе по шапке документа,
		//  ИмяОбъекта                - строка, имя объекта (справочник, регистр и т.д.),
		//  ИмяПоля                   - строка, имя поля объекта,
		//  ИмяПсевдонима             - строка, имя псевдонима в запросе поля объекта (необязательный).
		//

		public void ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(/*ДеревоПолейЗапросаПоШапке, ИмяОбъекта, ИмяПоля, ИмяПсевдонима = Неопределено*/)
		{
			/*// Поищем нужную строку.
*/
			/*// Вначале ищем объект.
*/
			//СтрокаОбъекта = ДеревоПолейЗапросаПоШапке.Строки.Найти(ИмяОбъекта, "Объект");
			if(true/*СтрокаОбъекта = Неопределено*/)
			{
				/*// нужно добавить.
*/
				//СтрокаОбъекта = ДеревоПолейЗапросаПоШапке.Строки.Добавить();
				//СтрокаОбъекта.Объект    = ИмяОбъекта;
				//СтрокаОбъекта.Поле      = ИмяПоля;
				//СтрокаОбъекта.Псевдоним = ИмяПсевдонима;
			}
			/*// Ищем поле.
*/
			//СтрокаПоля = СтрокаОбъекта.Строки. Найти(ИмяПоля,"Поле");
			if(true/*СтрокаПоля = Неопределено*/)
			{
				/*// нужно добавить
*/
				//СтрокаПоля = СтрокаОбъекта.Строки.Добавить();
				//СтрокаПоля.Поле      = ИмяПоля;
				//СтрокаПоля.Псевдоним = ИмяПсевдонима;
			}
			/*// Ищем псевдоним.
*/
			//СтрокаПоля = СтрокаОбъекта.Строки.Найти( ИмяПсевдонима, "Псевдоним");
			if(true/*СтрокаПоля = Неопределено*/)
			{
				/*// нужно добавить
*/
				//СтрокаПоля = СтрокаОбъекта.Строки.Добавить();
				//СтрокаПоля.Поле      = ИмяПоля;
				//СтрокаПоля.Псевдоним = ИмяПсевдонима;
			}
		}
		// ДобавитьСтрокуВДеревоПолейЗапросаПоШапке()
		// Формирует запрос на дополнительные параметры, нужные при проведении документа.
		//
		// Параметры:
		//  ДокументОбъект                 - объект проводимого документа,
		//  ДеревоПолейЗапросаПоШапке      - дерево значений, содержащего имена полей,
		//                                   которые нужно заполнить в запросе по шапке документа.
		//  СтруктураШапкиДокумента        - структура, содержащая значения реквизитов, относящихся к шапке документа,
		//                                   необходимых для его проведения.
		//  ВалютаРегламентированногоУчета - валюта регламентированного учета
		//
		// Возвращаемое значение:
		//  Дополненная по результату запроса структура СтруктураШапкиДокумента.
		//

		public object СформироватьЗапросПоДеревуПолей(/*ДокументОбъект, ДеревоПолейЗапросаПоШапке, СтруктураШапкиДокумента, ВалютаРегламентированногоУчета*/)
		{
			//СтрокиЗапроса           = "";
			//НуженКурсВалютыУпрУчета = Ложь;
			//НужнаУчетнаяПолитика    = Ложь;
			//НужнаНастройкаСпособовВеденияУправленческогоПартионногоУчета = Ложь;
			//ДокументОбъектМетаданные = ДокументОбъект.Метаданные();
			//Запрос = Новый Запрос;
			/*// Надо добавить константу ВалютаРегламнтированногоУчета
*/
			/*СтрокиЗапроса = СтрокиЗапроса + ",
	|	Константы.ВалютаРегламентированногоУчета КАК ВалютаРегламентированногоУчета";*/
			if(true/*НуженКурсВалютыУпрУчета*/)
			{
				/*СтрокаЗапросаКурсВалютыУпрУчета = "
		|
		|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДокумента,Валюта = &ВалютаУправленческогоУчета) КАК КурсыВалютСрезПоследних
		|	ПО Истина";*/
			}
			if(true/*НужнаНастройкаСпособовВеденияУправленческогоПартионногоУчета*/)
			{
				/*СтрокаЗапросаУчетнойПолитикиПоОрганизациям = "
	    |
		|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаСпособовВеденияУправленческогоПартионногоУчета.СрезПоследних(&ДатаДокумента,Организация = &ОрганизацияДокумента) КАК НастройкаСпособовВеденияУправленческогоПартионногоУчетаСрезПоследних
		|	ПО Истина";*/
				//Запрос.УстановитьПараметр("ОрганизацияДокумента" , ДокументОбъект.Организация);
			}
			if(true/*НужнаУчетнаяПолитика*/)
			{
				/*СтрокаЗапросаУчетнойПолитики = "
		|
		|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетнаяПолитика.СрезПоследних(&ДатаДокумента,) КАК УчетнаяПолитикаСрезПоследних
		|	ПО Истина";*/
			}
			/*Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ " + Сред(СтрокиЗапроса, 2) + "
	                | ИЗ 
	                |      Документ." + ДокументОбъектМетаданные.Имя + " КАК Док
					|      ,Константы"+ 
					СтрокаЗапросаУчетнойПолитикиПоОрганизациям + 
	                СтрокаЗапросаКурсВалютыУпрУчета + 
	                СтрокаЗапросаУчетнойПолитики + "
	                |     ГДЕ Док.Ссылка = &ДокументСсылка";*/
			/*// Установим параметры запроса.
*/
			//ДатаДокумента = ?(ДокументОбъектМетаданные.Реквизиты.Найти("ПериодРегистрации") <> Неопределено, КонецМесяца(ДокументОбъект.ПериодРегистрации), ДокументОбъект.Дата);
			//ВалютаУправленческогоУчета = глЗначениеПеременной("ВалютаУправленческогоУчета");
			//Запрос.УстановитьПараметр("ДокументСсылка" , ДокументОбъект.Ссылка);
			//Запрос.УстановитьПараметр("ДатаДокумента"  , ДатаДокумента);
			//Запрос.УстановитьПараметр("ВалютаУправленческогоУчета" , ВалютаУправленческогоУчета);
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*РезультатЗапроса.Пустой()*/)
			{
				/*// Сформировать структуру шапки
*/
			}
			if(true/*СтруктураШапкиДокумента.Свойство("ВалютаДокумента")*/)
			{
				if(true/*ДокументОбъектМетаданные.Реквизиты.Найти("ВалютаДокумента") <> Неопределено*/)
				{
					//СтруктураШапкиДокумента.Вставить("КурсДокумента", 		ЗаполнениеДокументов.КурсДокумента(ДокументОбъект, ВалютаРегламентированногоУчета));
					//СтруктураШапкиДокумента.Вставить("КратностьДокумента", 	ЗаполнениеДокументов.КратностьДокумента(ДокументОбъект, ВалютаРегламентированногоУчета));
				}
			}
			return null;
		}
		// СформироватьЗапросПоДеревуПолей()
		// Проверяет, что в табличной части нет услуг.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - табличная часть документа,
		//  ТаблицаЗначений   - таблица значений, содержащая данные табличной части и признак услуги
		//  Отказ                      - флаг отказа в проведении.
		//  Заголовок                  - строка, заголовок сообщения об ошибке проведения.
		//

		public void ПроверитьЧтоНетУслуг(/*ДокументОбъект, ИмяТабличнойЧасти, ТаблицаЗначений = Неопределено, 
                                                    Отказ, Заголовок*/)
		{
			if(true/*(НЕ ТаблицаЗначений = Неопределено) И (ТаблицаЗначений.Количество() > 0)*/)
			{
				/*// Цикл по строкам таблицы значений.
*/
			}
		}
		// ПроверитьЧтоНетУслуг()
		// Проверяет, что в табличной части нет услуг.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - табличная часть документа,
		//  ТаблицаЗначений   - таблица значений, содержащая данные табличной части и признак услуги
		//  Отказ                      - флаг отказа в проведении.
		//  Заголовок                  - строка, заголовок сообщения об ошибке проведения.
		//

		public void ПроверитьЧтоНетТоваров(/*ДокументОбъект, ИмяТабличнойЧасти, ТаблицаЗначений, 
                                                    Отказ, Заголовок*/)
		{
			/*// Цикл по строкам таблицы значений.
*/
		}
		// ПроверитьЧтоНетТоваров()
		// Проверяет, что в табличной части нет наборов.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - табличная часть документа,
		//  ТаблицаЗначений   - таблица значений, содержащая данные табличной части и признак услуги
		//  Отказ                      - флаг отказа в проведении.
		//  Заголовок                  - строка, заголовок сообщения об ошибке проведения.
		//

		public void ПроверитьЧтоНетНаборов(/*ДокументОбъект, ИмяТабличнойЧасти, ТаблицаЗначений = Неопределено, 
                                                    Отказ, Заголовок*/)
		{
			if(true/*(НЕ ТаблицаЗначений = Неопределено) И (ТаблицаЗначений.Количество() > 0)*/)
			{
				/*// Цикл по строкам таблицы значений.
*/
			}
		}
		// ПроверитьЧтоНетНаборов()
		// Проверяет, что в табличной части нет комплектов.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - табличная часть документа,
		//  ТаблицаЗначений   - таблица значений, содержащая данные табличной части и признак комплекта
		//  Отказ             - флаг отказа в проведении.
		//  Заголовок         - строка, заголовок сообщения об ошибке проведения.
		//

		public void ПроверитьЧтоНетКомплектов(/*ДокументОбъект, ИмяТабличнойЧасти, ТаблицаЗначений, 
                                                    Отказ, Заголовок*/)
		{
			/*// Цикл по строкам таблицы значений.
*/
		}
		// ПроверитьЧтоНетКомплектов()
		// Проверяет, что в размещение, указанное в табиличной части, не на складе НТТ.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - табличная часть документа,
		//  ТаблицаЗначений   - таблица значений, содержащая данные табличной части и признак услуги
		//  Отказ                      - флаг отказа в проведении.
		//  Заголовок                  - строка, заголовок сообщения об ошибке проведения.
		//

		public void ПроверитьЧтоСкладНеНТТ(/*ДокументОбъект, ИмяТабличнойЧасти, ТаблицаЗначений, 
                                                    Отказ, Заголовок, ИмяВидаСкладаРазмещения = "ВидСкладаРазмещения"*/)
		{
			/*// Цикл по строкам таблицы значений.
*/
		}
		// ПроверитьЧтоСкладНеНТТ()
		//Проверяет, что склад указанный в шапке документа - оптовый
		//Параметры:
		//	СтруктураШапкиДокумента - структура шапки документа, подготовленная при проведении
		//  Отказ                   - флаг отказа в проведении.
		//  Заголовок               - строка, заголовок сообщения об ошибке проведения
		//  ИмяСклада				- имя ключа структуры, в котором хранится склад
		//	ИмяВидаСклада			- имя ключа структуры, в котором хранится вид склада

		public void ПроверитьЧтоСкладВШапкеОптовый(/*СтруктураШапкиДокумента, Отказ, Заголовок, ИмяСклада = "Склад", ИмяВидаСклада = "ВидСклада"*/)
		{
			/*//Если склад не указан, не имеет смысла проверять вид склада
*/
			if(true/*НЕ ЗначениеЗаполнено(СтруктураШапкиДокумента[ИмяСклада])*/)
			{
			}
			if(true/*ИмяВидаСклада = ""*/)
			{
				//ВидСклада = СтруктураШапкиДокумента[ИмяСклада].ВидСклада;
			}
			if(true/*ВидСклада <> Перечисления.ВидыСкладов.Оптовый*/)
			{
				//ОбщегоНазначения.СообщитьОбОшибке("В документе можно указывать только оптовый склад!", Отказ, Заголовок);
			}
		}
		// Проверяет, что в табличной части нет номенклатуры, учет которой ведется по характеристикам.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - табличная часть документа,
		//  ТаблицаЗначений   - таблица значений, содержащая данные табличной части и признак учет по характеристикам
		//  Отказ                      - флаг отказа в проведении.
		//  Заголовок                  - строка, заголовок сообщения об ошибке проведения.
		//

		public void ПроверитьЧтоНетНоменклатурыСХарактеристиками(/*ДокументОбъект, ИмяТабличнойЧасти, ТаблицаЗначений, 
                                                    Отказ, Заголовок*/)
		{
			/*// Цикл по строкам таблицы значений.
*/
		}
		// ПроверитьЧтоНетНоменклатурыСХарактеристиками()
		// Процедура проверяет, что в серии заполнен номер ГТД.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  ИмяТабличнойЧасти - табличная часть документа,
		//  ТаблицаЗначений   - таблица значений, содержащая данные табличной части и признак услуги
		//  Отказ                      - флаг отказа в проведении.
		//  Заголовок                  - строка, заголовок сообщения об ошибке проведения.
		//

		public void ПроверитьЧтоВСерииЗаполненНомерГТД(/*ДокументОбъект, ИмяТабличнойЧасти, ТаблицаЗначений, Отказ, Заголовок*/)
		{
			/*// Цикл по строкам таблицы значений.
*/
		}
		// ПроверитьЧтоВСерииЗаполненНомерГТД()
		// .Корректирует структуру обязательных полей в зависимости от настроек пользователей.
		//
		// Параметры:
		//  ВидСклада                  - вид склада (необязательный),
		//  СтруктураОбязательныхПолей - корректируемая структура обязательных полей.
		//

		public void КорректировкаСтруктурыОбязательныхПолей(/*СтруктураОбязательныхПолей, ВидСклада = Неопределено*/)
		{
			//РазрешитьНулевыеСуммыИЦены = Ложь;
			if(true/*ВидСклада = Перечисления.ВидыСкладов.Оптовый
	 Или НЕ ЗначениеЗаполнено(ВидСклада)*/)
			{
				//РазрешитьНулевыеСуммыИЦены = УправлениеДопПравамиПользователей.РазрешитьНулевыеЦеныВОпте();
			}
			if(true/*РазрешитьНулевыеСуммыИЦены*/)
			{
				if(true/*СтруктураОбязательныхПолей.Свойство("Сумма")*/)
				{
					//СтруктураОбязательныхПолей.Удалить("Сумма");
				}
				if(true/*СтруктураОбязательныхПолей.Свойство("Цена")*/)
				{
					//СтруктураОбязательныхПолей.Удалить("Цена");
				}
				if(true/*СтруктураОбязательныхПолей.Свойство("ЦенаВРознице")*/)
				{
					//СтруктураОбязательныхПолей.Удалить("ЦенаВРознице");
				}
			}
		}
		// КорректировкаСтруктурыОбязательныхПолей()
		// По переданной структуре полей формирует запрос по табличной части документа.
		//
		// Параметры:
		//  ДокументОбъект        - объект проводимого документа,
		//  ИмяТабличнойЧасти     - строка, имя табличной части,
		//  СтруктураПолей        - структура, ключ структуры содержит псевдоним поля запроса, значение - строку запроса,
		//  СтруктураСложныхПолей - структура, ключ структуры содержит псевдоним поля запроса, значение - строку запроса,
		//                          необязательный параметр, служит для передачи конструкций типа "ВЫБОР" и т.д.
		//
		// Возвращаемое значение:
		//  Результат запроса.
		//

		public object СформироватьЗапросПоТабличнойЧасти(/*ДокументОбъект, ИмяТабличнойЧасти, СтруктураПолей,
                                           СтруктураСложныхПолей = Неопределено*/)
		{
			//ТекстЗапроса = "";
			//ДокументМетаданные = ДокументОбъект.Метаданные();
			//ТекстСоединение="";
			//Запрос = Новый Запрос;
			if(true/*ТипЗнч(СтруктураСложныхПолей) = Тип("Структура")*/)
			{
				/*// Добавим к запросу конструкции.
*/
				if(true/*СтруктураСложныхПолей.Свойство("Проект")*/)
				{
					/*ТекстСоединение="
			|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УстановкаПроектовДляНоменклатуры.СрезПоследних(&ДатаДок, НоменклатураПроекта В (ВЫБРАТЬ Номенклатура ИЗ Документ." + ДокументМетаданные.Имя + "."+ СокрЛП(ИмяТабличнойЧасти) + " ГДЕ Ссылка = &ДокументСсылка)) КАК ПроектыНоменклатуры
			|ПО Док.Номенклатура=ПроектыНоменклатуры.НоменклатураПроекта";*/
					//Запрос.УстановитьПараметр("ДатаДок",ДокументОбъект.Дата);
				}
			}
			/*Запрос.Текст = "ВЫБРАТЬ 
				| Док.НомерСтроки " + ТекстЗапроса + "
				| ИЗ 
				|      Документ." + ДокументМетаданные.Имя + "."+ СокрЛП(ИмяТабличнойЧасти) + 
				" КАК Док"+ТекстСоединение+" 
				|     ГДЕ Док.Ссылка = &ДокументСсылка
				| УПОРЯДОЧИТЬ ПО 
				| 		Док.НомерСтроки";*/
			/*// Установим параметры запроса.
*/
			//Запрос.УстановитьПараметр("ДокументСсылка" , ДокументОбъект.Ссылка);
			if(true/*ДокументОбъект[ИмяТабличнойЧасти].Количество() = 0*/)
			{
				//Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ Док.Ссылка = &ДокументСсылка", "ГДЕ ЛОЖЬ");
			}
			return null;
		}
		// СформироватьЗапросПоТабличнойЧасти()
		// Возвращает таблицу остатков по сериям на заданом складе в заданной организации, для склада с видом НТТ.

		public object ПолучитьТаблицуОстатковПоСериямДляНТТ(/*СкладДоговор, МассивНоменклатуры,КонДата*/)
		{
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Номенклатура", МассивНоменклатуры);
			//Запрос.УстановитьПараметр("Новый",        Справочники.Качество.Новый);
			//Запрос.УстановитьПараметр("КонДата",      КонДата);
			if(true/*ТипЗнч(СкладДоговор) = Тип("Массив")*/)
			{
				//МассивСклады = СкладДоговор;
			}
			//Запрос.УстановитьПараметр("Склад",              МассивСклады);
			/*Запрос.Текст =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ТоварыНаСкладахОстатки.Номенклатура                                     КАК Номенклатура,
	|	ТоварыНаСкладахОстатки.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентХраненияОстатков,
	|	ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры                       КАК ХарактеристикаНоменклатуры,
	|	ТоварыНаСкладахОстатки.СерияНоменклатуры                                КАК СерияНоменклатуры,
	|	ТоварыНаСкладахОстатки.СерияНоменклатуры.СрокГодности                   КАК СрокГодности,
	|	ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстатки.СерияНоменклатуры)                 КАК СерияНоменклатурыПредставление,
	|	&Новый                                         							КАК Качество,
	|	ТоварыНаСкладахОстатки.Склад                                            КАК Склад,
	|	ТоварыНаСкладахОстатки.ЦенаВРознице									 	КАК Цена,
	|	Сумма(ТоварыНаСкладахОстатки.КоличествоОстаток)                         КАК Остаток, 
	|	0                                                                		КАК ОстатокКПередаче
	|ИЗ
	|	РегистрНакопления.ТоварыВНТТ.Остатки(&КонДата, Склад В (&Склад)
	|	   И Номенклатура В (&Номенклатура)) ТоварыНаСкладахОстатки
	|
	|СГРУППИРОВАТЬ ПО
	|	ТоварыНаСкладахОстатки.Номенклатура,
	|	ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
	|	ТоварыНаСкладахОстатки.СерияНоменклатуры,
	|	ТоварыНаСкладахОстатки.Склад,
	|   ТоварыНаСкладахОстатки.ЦенаВРознице	
	|";*/
			//РезультатЗапроса = Запрос.Выполнить();
			//ТаблицаПоСкладам = РезультатЗапроса.Выгрузить();
			//ТаблицаПоСкладам.Сортировать("Номенклатура, ХарактеристикаНоменклатуры, СрокГодности,СерияНоменклатурыПредставление");
			return null;
		}
		// Возвращает таблицу остатков по сериям на заданом складе в заданной организации.
		// Используется при заполении по кнопке "Заполнить и провести" в документах, списывающих товары.
		//
		// Параметры:
		//  Склад              - склад, на котором получаются остатки,
		//  Организация        - организация, по которой получаются остатки
		//  МассивНоменклатуры - массив, содержащий номенклатуру, по которой необходимо получить остатки
		//

		public object ПолучитьТаблицуОстатковПоСериям(/*СкладДоговор, Организация, МассивНоменклатуры, Комиссионер = Неопределено, НТТ = Ложь, ТаблицаРезервовПоСериям=неопределено,КонДата=неопределено*/)
		{
			if(true/*НТТ*/)
			{
				//Возврат ПолучитьТаблицуОстатковПоСериямДляНТТ(СкладДоговор, МассивНоменклатуры,?(КонДата=неопределено,Дата("00010101000000"),КонДата));
			}
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Организация",  Организация);
			//Запрос.УстановитьПараметр("Номенклатура", МассивНоменклатуры);
			//Запрос.УстановитьПараметр("Новый",        Справочники.Качество.Новый);
			//Запрос.УстановитьПараметр("КонДата",      ?(КонДата=неопределено,Дата("00010101000000"),КонДата));
			if(true/*Комиссионер = Неопределено*/)
			{
				if(true/*ТипЗнч(СкладДоговор) = Тип("Массив")*/)
				{
					//МассивСклады = СкладДоговор;
				}
				//ИмяРегистра = "ТоварыНаСкладах";
				//Запрос.УстановитьПараметр("Комиссионер",        Справочники.Контрагенты.ПустаяСсылка());
				//Запрос.УстановитьПараметр("Склад",              МассивСклады);
			}
			//МожноПревышатьОстатокПоОрганизации=УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровОрганизации(Организация);
			//КонтролироватьОстатокПоОрганизацииПоСкладу = ложь;
			//СтруктураУП = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиУпр(ТекущаяДата(), Ложь);
			if(true/*ЗначениеЗаполнено(СтруктураУП)*/)
			{
				//КонтролироватьОстатокПоОрганизацииПоСкладу = СтруктураУП.ВестиУчетТоваровОрганизацийВРазрезеСкладов;
			}
			/*ТекстЗапросаПоОрганизации = "
	|ВЫБРАТЬ 
	|   истина 						   								   КАК флОстатокОрганизации,
	|	ТоварыОрганизацийОстатки.Номенклатура                          КАК Номенклатура,
	|	ТоварыОрганизацийОстатки.ХарактеристикаНоменклатуры            КАК ХарактеристикаНоменклатуры,
	|	ТоварыОрганизацийОстатки.СерияНоменклатуры                     КАК СерияНоменклатуры,
	|	ТоварыОрганизацийОстатки.СерияНоменклатуры.СрокГодности        КАК СрокГодности,
	|	ПРЕДСТАВЛЕНИЕ(ТоварыОрганизацийОстатки.СерияНоменклатуры)      КАК СерияНоменклатурыПредставление,
	|	ТоварыОрганизацийОстатки.Качество                              КАК Качество,
	|	ТоварыОрганизацийОстатки.Склад                                 КАК Склад,
	|	ТоварыОрганизацийОстатки.КоличествоОстаток                     КАК Остаток,
	|	ТоварыКПередачеОрганизацийОрганизацийОстатки.КоличествоОстаток КАК ОстатокКПередаче
	|ИЗ
	|	РегистрНакопления.ТоварыОрганизаций.Остатки(&КонДата,
	|"+ ?(МожноПревышатьОстатокПоОрганизации, "", "		    Организация                = &Организация
	|		  И") + " Номенклатура               В (&Номенклатура)
	|		  И Комиссионер                = &Комиссионер
	|	  	  "+?(КонтролироватьОстатокПоОрганизацииПоСкладу,"И Склад В (&Склад)","")+"
	|	) КАК ТоварыОрганизацийОстатки
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыКПередачеОрганизаций.Остатки(&КонДата,
	|"+ ?(МожноПревышатьОстатокПоОрганизации,"","		    Организация                = &Организация
	|		  И") + " Номенклатура               В (&Номенклатура)
	|	  	  "+?(КонтролироватьОстатокПоОрганизацииПоСкладу,"И Склад В (&Склад)","")+"
	|	) КАК ТоварыКПередачеОрганизацийОрганизацийОстатки
	|ПО
	|	ТоварыОрганизацийОстатки.Номенклатура                 = ТоварыКПередачеОрганизацийОрганизацийОстатки.Номенклатура
	|	И ТоварыОрганизацийОстатки.ХарактеристикаНоменклатуры = ТоварыКПередачеОрганизацийОрганизацийОстатки.ХарактеристикаНоменклатуры
	|	И ТоварыОрганизацийОстатки.СерияНоменклатуры          = ТоварыКПередачеОрганизацийОрганизацийОстатки.СерияНоменклатуры
	|	И ТоварыОрганизацийОстатки.Организация = ТоварыКПередачеОрганизацийОрганизацийОстатки.Организация
	|	И ТоварыОрганизацийОстатки.Качество                   = ТоварыКПередачеОрганизацийОрганизацийОстатки.Качество
	|	И ТоварыОрганизацийОстатки.Склад                      = ТоварыКПередачеОрганизацийОрганизацийОстатки.Склад";*/
			if(true/*Комиссионер = Неопределено*/)
			{
				if(true/*ИмяРегистра = "ТоварыНаСкладах"*/)
				{
					/*ТекстЗапросаСклады = "
			|(ВЫБРАТЬ
			|	ТоварыНаСкладахОстатки.Номенклатура,
			|	ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
			|	ТоварыНаСкладахОстатки.СерияНоменклатуры,
			|	ТоварыНаСкладахОстатки.Качество,
			|	ТоварыНаСкладахОстатки.Склад,
			|	СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
			|ИЗ
			|	(ВЫБРАТЬ
			|		ТоварыНаСкладах.Номенклатура,
			|		ТоварыНаСкладах.ХарактеристикаНоменклатуры,
			|		ТоварыНаСкладах.СерияНоменклатуры,
			|		ТоварыНаСкладах.Качество,
			|		ТоварыНаСкладах.Склад,
			|		ТоварыНаСкладах.КоличествоОстаток
			|	ИЗ
			|		РегистрНакопления.ТоварыНаСкладах.Остатки(&КонДата, Склад В (&Склад)
			|		   И Номенклатура В (&Номенклатура)) ТоварыНаСкладах
			|	ОБЪЕДИНИТЬ ВСЕ
			|	ВЫБРАТЬ
			|		ТоварыВРознице.Номенклатура,
			|		ТоварыВРознице.ХарактеристикаНоменклатуры,
			|		ТоварыВРознице.СерияНоменклатуры,
			|		ТоварыВРознице.Качество,
			|		ТоварыВРознице.Склад,
			|		ТоварыВРознице.КоличествоОстаток
			|	ИЗ
			|		РегистрНакопления.ТоварыВРознице.Остатки(&КонДата, Склад В (&Склад)
			|		   И Номенклатура В (&Номенклатура)) ТоварыВРознице
			|	) КАК ТоварыНаСкладахОстатки
			|	СГРУППИРОВАТЬ ПО
			|		ТоварыНаСкладахОстатки.Номенклатура,
			|		ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
			|		ТоварыНаСкладахОстатки.СерияНоменклатуры,
			|		ТоварыНаСкладахОстатки.Качество,
			|		ТоварыНаСкладахОстатки.Склад
			|) ТоварыНаСкладахОстатки
			|";*/
				}
				/*Запрос.Текст =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ВложенныйЗапрос.флОстатокОрганизации 							 КАК флОстатокОрганизации,
		|	ВложенныйЗапрос.Номенклатура                                     КАК Номенклатура,
		|	ВложенныйЗапрос.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентХраненияОстатков,
		|	ВложенныйЗапрос.ХарактеристикаНоменклатуры                       КАК ХарактеристикаНоменклатуры,
		|	ВложенныйЗапрос.СерияНоменклатуры                                КАК СерияНоменклатуры,
		|	ВложенныйЗапрос.СерияНоменклатуры.СрокГодности                   КАК СрокГодности,
		|	ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.СерияНоменклатуры)	  			 КАК СерияНоменклатурыПредставление,
		|	ВложенныйЗапрос.Качество                                         КАК Качество,
		|	ВложенныйЗапрос.Склад                                            КАК Склад,
		|	МИНИМУМ(ВложенныйЗапрос.Остаток)                                 КАК Остаток," 
		+ ?(ИмяРегистра = "ТоварыНаСкладах", "
		|	МИНИМУМ(ВложенныйЗапрос.ОстатокКПередаче)                        КАК ОстатокКПередаче", "
		|	0                                                                КАК ОстатокКПередаче") + "
		|ИЗ
		|	(ВЫБРАТЬ
		|	ложь 												  КАК флОстатокОрганизации,
		|	ТоварыНаСкладахОстатки.Номенклатура                   КАК Номенклатура,
		|	ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры     КАК ХарактеристикаНоменклатуры,
		|	ТоварыНаСкладахОстатки.СерияНоменклатуры              КАК СерияНоменклатуры,
		|	ТоварыНаСкладахОстатки.СерияНоменклатуры.СрокГодности КАК СрокГодности,
		|	ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстатки.СерияНоменклатуры) КАК СерияНоменклатурыПредставление,
		|	"+ ?(ИмяРегистра = "ТоварыНаСкладах", "ТоварыНаСкладахОстатки.Качество", "&Новый") + " КАК Качество,
		|	"+ ?(ИмяРегистра <> "ТоварыПереданные", "ТоварыНаСкладахОстатки.Склад",     "NULL")  + " КАК Склад,
		|	ТоварыНаСкладахОстатки.КоличествоОстаток              КАК Остаток,"
		+ ?(ИмяРегистра = "ТоварыНаСкладах", "
		|	ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток     КАК ОстатокКПередаче", "
		|	0                                                     КАК ОстатокКПередаче") + "
		|ИЗ
		|" + ТекстЗапросаСклады + ?(ИмяРегистра = "ТоварыНаСкладах","
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&КонДата,
		|		Склад В (&Склад)
		|	  И Номенклатура               В (&Номенклатура)
		|	) КАК ТоварыКПередачеСоСкладовОстатки
		|ПО
		|	ТоварыНаСкладахОстатки.Номенклатура               = ТоварыКПередачеСоСкладовОстатки.Номенклатура
		|	И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
		|	И ТоварыНаСкладахОстатки.СерияНоменклатуры          = ТоварыКПередачеСоСкладовОстатки.СерияНоменклатуры
		|	И ТоварыНаСкладахОстатки.Качество                   = ТоварыКПередачеСоСкладовОстатки.Качество
		|", "
		|") + "
		|ОБЪЕДИНИТЬ ВСЕ
		|"
		+ ТекстЗапросаПоОрганизации + ") КАК ВложенныйЗапрос
		|
		|СГРУППИРОВАТЬ ПО
		|	ВложенныйЗапрос.флОстатокОрганизации,
		|	ВложенныйЗапрос.Номенклатура,
		|	ВложенныйЗапрос.ХарактеристикаНоменклатуры,
		|	ВложенныйЗапрос.СерияНоменклатуры,
		|	ВложенныйЗапрос.Качество,
		|	ВложенныйЗапрос.Склад
		|";*/
			}
			//РезультатЗапроса = Запрос.Выполнить();
			/*// Таблица остатков по организации
*/
			//ТаблицаПоОрганизации = РезультатЗапроса.Выгрузить();
			if(true/*Комиссионер = Неопределено*/)
			{
				//Сч = 0;
				while(true/*Сч < ТаблицаПоОрганизации.Количество()*/)
				{
					//СтрокаТаблицы = ТаблицаПоОрганизации.Получить(Сч);
					if(true/*не СтрокаТаблицы.флОстатокОрганизации*/)
					{
						//ТаблицаПоОрганизации.Удалить(СтрокаТаблицы);
					}
				}
				/*// Таблица остатков на складах
*/
				//ТаблицаПоСкладам = РезультатЗапроса.Выгрузить();
				//Сч = 0;
				while(true/*Сч < ТаблицаПоСкладам.Количество()*/)
				{
					//СтрокаТаблицы = ТаблицаПоСкладам.Получить(Сч);
					if(true/*СтрокаТаблицы.флОстатокОрганизации*/)
					{
						//ТаблицаПоСкладам.Удалить(СтрокаТаблицы);
					}
				}
				/*// Корректировка остатков склада
*/
				if(true/*не МожноПревышатьОстатокПоОрганизации*/)
				{
					/*//удаление строк из остатков по складам, для которых вообще нет остатков по организации
*/
				}
				//ТаблицаПоСкладам.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, СрокГодности, СерияНоменклатурыПредставление, Качество, Склад", "Остаток");
				if(true/*глЗначениеПеременной("ИспользоватьУказаниеСерийНоменклатурыПриРезервировании")*/)
				{
					/*//для учета серий товара, зарезервированных под конкретный заказ покупателя, необходимо следующее:
*/
					/*//1) В любом случае - из доступного остатка по серии на складе исключить резерв по серии под заказ покупателя
*/
					/*//2) Если списание происходит из резерва по заказу покупателя - подобрать серии, которые зарезервированы под заказ покупателя 
*/
					/*//		(заполнить предназначенную для этого таблицу ТаблицаРезервовПоСериям)
*/
					//ЗапросРезервы = новый Запрос;
					/*ЗапросРезервы.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
			|Номенклатура,
			|ХарактеристикаНоменклатуры,
			|СерияНоменклатуры,
			|СерияНоменклатуры.СрокГодности  КАК СрокГодности,
			|ПРЕДСТАВЛЕНИЕ(СерияНоменклатуры) КАК СерияНоменклатурыПредставление,
			|Склад,
			|&Новый КАК Качество,
			|ДокументРезерва,
			|КоличествоОстаток КАК Остаток
			|ИЗ
			|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&КонДата,Склад В (&Склад)
			|	  И Номенклатура  В (&Номенклатура)
			|	  И ВЫРАЗИТЬ(ДокументРезерва КАК ДОкумент.ЗаказПокупателя).ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей = истина
			|							 ) КАК РезервыПоСерии
			|ГДЕ КоличествоОстаток>0";*/
					//ЗапросРезервы.УстановитьПараметр("Номенклатура", МассивНоменклатуры);
					//ЗапросРезервы.УстановитьПараметр("Новый",        Справочники.Качество.Новый);
					//ЗапросРезервы.УстановитьПараметр("Склад",        МассивСклады);
					//ЗапросРезервы.УстановитьПараметр("КонДата",      ?(КонДата=неопределено,Дата("00010101000000"),КонДата));
					//РезультатЗапроса = ЗапросРезервы.Выполнить();
					/*//этап1 - уменьшение свободного остатка по серии на количество серии в резерве под заказ
*/
					//Выборка = РезультатЗапроса.Выбрать();
					while(true/*Выборка.Следующий()*/)
					{
						/*//уменьшение остатка на количество резерва
*/
						//нстр = ТаблицаПоСкладам.Добавить();
						//ЗаполнитьЗначенияСвойств(нстр, Выборка);
						//нстр.Остаток = (-1)*Выборка.Остаток;
					}
					/*;
			ТаблицаПоСкладам.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, СрокГодности, СерияНоменклатурыПредставление, Качество, Склад", "Остаток");*/
					/*//удалим строки с пустым остатком
*/
					//КоличествоСтрок = ТаблицаПоСкладам.Количество();
					/*//этап2 - при необходимости готовим таблицу с данными по зарезервированным сериям номенклатуры
*/
					if(true/*ТаблицаРезервовПоСериям<>неопределено*/)
					{
						//ТаблицаРезервовПоСериям =  РезультатЗапроса.Выгрузить();
					}
				}
				//ТаблицаСерий = ТаблицаПоСкладам.Скопировать();
			}
			//ТаблицаСерий.Сортировать("Номенклатура, ХарактеристикаНоменклатуры, СрокГодности, СерияНоменклатурыПредставление");
			return null;
		}
		// ПолучитьТаблицуОстатковПоСериям()
		// Возвращает таблицу остатков по сериям на заданом складе в заданной организации.
		// Используется при заполении по кнопке "Заполнить и провести" в документах, списывающих товары.
		//
		// Параметры:
		//  МассивСклады       - массив, склады, на котором получаются остатки.
		//  Организация        - организация, по которой получаются остатки.
		//  МассивНоменклатуры - массив, содержащий номенклатуру, по которой необходимо получить остатки.
		//

		public object ПолучитьТаблицуСвободныхОстатковПоСериям(/*МассивСклады, Организация, МассивНоменклатуры*/)
		{
			//Запрос = Новый Запрос();
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	ТоварыНаСкладахОстатки.Номенклатура,
	|	ТоварыНаСкладахОстатки.СерияНоменклатуры,
	|	ТоварыНаСкладахОстатки.СерияНоменклатуры.СрокГодности КАК СрокГодности,
	|	ТоварыНаСкладахОстатки.СерияНоменклатуры.Представление КАК СерияНоменклатурыПредставление,
	|	ТоварыНаСкладахОстатки.Склад,
	|	ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
	|	ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток, 0) КАК Остаток
	|ИЗ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки(
	|		,
	|		Номенклатура В (&Номенклатура)
	|			И Склад В (&Склад)
	|			И Качество = &НовоеКачество) КАК ТоварыНаСкладахОстатки
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
	|		,
	|		Номенклатура В (&Номенклатура)
	|		    И Склад В (&Склад)) КАК ТоварыВРезервеНаСкладахОстатки
	|		ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
	|			И ТоварыНаСкладахОстатки.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
	|			И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
	|			И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
	|		,
	|		Номенклатура В (&Номенклатура)
	|			И Склад В (&Склад)
	|			И Качество = &НовоеКачество) КАК ТоварыКПередачеСоСкладовОстатки
	|		ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура
	|			И ТоварыНаСкладахОстатки.СерияНоменклатуры = ТоварыКПередачеСоСкладовОстатки.СерияНоменклатуры
	|			И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
	|			И ТоварыНаСкладахОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад
	|УПОРЯДОЧИТЬ ПО ТоварыНаСкладахОстатки.Номенклатура,СрокГодности,СерияНоменклатурыПредставление";*/
			//Запрос.УстановитьПараметр("Склад", МассивСклады);
			//Запрос.УстановитьПараметр("Номенклатура", МассивНоменклатуры);
			//Запрос.УстановитьПараметр("НовоеКачество", Справочники.Качество.Новый);
			return null;
		}
		// ПолучитьТаблицуСвободныхОстатковПоСериям()
		// Если установлено использование расширенной аналитики выводит сообщение о том, что не рекомендуется пользоваться отчетом
		//
		// Параметры:
		//  ИмяОтчета       - строка, содержит имя отчета из которого вызывается процедура.
		//

		public void СообщитьОВозможностиИспользованияОтчетаПоРегиструПартий(/*ИмяОтчета*/)
		{
			if(true/*глЗначениеПеременной("ИспользоватьРасширеннуюАналитикуУчетаНоменклатурыИЗатрат")*/)
			{
				//ДатаНачалаИспользованияРасширеннойАналитики = Формат(глЗначениеПеременной("ДатаНачалаИспользованияРасширеннойАналитикиУчетаНоменклатурыИЗатрат"),"ДЛФ=DD");
				/*ОбщегоНазначения.Сообщение("Использование отчета """ + ИмяОтчета + """ не поддерживается, 
		|т.к. в настройках учета установлено использование расширенной аналитики учета затрат начиная с  " + ДатаНачалаИспользованияРасширеннойАналитики + ".
		|Не рекомендуется формировать отчет за период позже " + ДатаНачалаИспользованияРасширеннойАналитики);*/
			}
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ РЕЗЕРВИРОВАНИЯ

		public void СообщитьОНедостаткеТовара(/*Требуется, Свободно = 0, ВРезерве = 0, КПередаче = 0, КПолучению = 0, Отказ, Заголовок="", Склад = "", ЗаказПоставщику = "", Номенклатура = "", Характеристика = "", Серия = "", Качество = "", ЕИ = "", СтрокаСообщения = ""*/)
		{
			if(true/*СтрокаСообщения = ""*/)
			{
				if(true/*ВРезерве > 0 ИЛИ КПередаче > 0*/)
				{
					//СтрокаСообщения = "Свободного остатка ";
				}
			}
			//СтрокаСообщения = СтрокаСообщения + Номенклатура + Характеристика + Серия;
			//СтрокаСообщения = СтрокаСообщения + ?(Качество = "", "", " с качеством " + Качество);
			if(true/*ЗаказПоставщику <> "" И Склад <> ""*/)
			{
				//СтрокаСообщения = СтрокаСообщения + " в заказах поставщикам на склад " + Склад + " недостаточно для размещения.";
			}
			//ОшибкаНетОстатка(СтрокаСообщения, Свободно , Требуется, ЕИ, Отказ, Заголовок);
			if(true/*КПередаче > 0*/)
			{
				//ОбщегоНазначения.СообщитьОбОшибке("К передаче " + КПередаче + " " + ЕИ, , Заголовок, СтатусСообщения.Информация);
			}
			if(true/*ВРезерве > 0*/)
			{
				//ОбщегоНазначения.СообщитьОбОшибке("Зарезервировано " + ВРезерве + " " + ЕИ, , Заголовок, СтатусСообщения.Информация);
			}
			if(true/*КПолучению > 0*/)
			{
				//ОбщегоНазначения.СообщитьОбОшибке("К получению "+ КПолучению + " "+ ЕИ, , Заголовок, СтатусСообщения.Информация);
			}
		}
		// СообщитьОНедостаткеТовара()
		////////////////////////////////////////////////////////////////////////////////
		// Процедура формирует массив типов цен по помеченным элементам списка значений

		public void СформироватьМассивБазовыхТиповЦен(/*СписокТиповЦен, МассивТиповЦен, МассивРассчитываемыхЦен, ВсеТипыЦен = Ложь*/)
		{
			//МассивТиповЦен.Очистить();
			//МассивРассчитываемыхЦен.Очистить();
		}
		// Функция по типы цены СправочникСсылка.ТипыЦенНоменклатуры определяет префикс имени колонки

		public object ОпределитьПрефиксИмениКолонки(/*ТаблицаПоиска, ТипЦены*/)
		{
			if(true/*(ТаблицаПоиска = Неопределено)*/)
			{
			}
			return null;
		}
		// Процедура создает в дереве необходимые для работы колонки сумм
		//с определенным префиксов в наименовании

		public void СоздатьКолонкиСуммДерево(/*Дерево, Префикс*/)
		{
			//Дерево.Колонки.Добавить(Префикс + "Цена"            , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
			//Дерево.Колонки.Добавить(Префикс + "ВалютаЦены"      , Новый ОписаниеТипов("СправочникСсылка.Валюты"));
			//Дерево.Колонки.Добавить(Префикс + "ЦенаНоменклатуры", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
			//Дерево.Колонки.Добавить(Префикс + "КурсВалюты"      , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,4)));
			//Дерево.Колонки.Добавить(Префикс + "КратностьВалюты" , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,0)));
			//Дерево.Колонки.Добавить(Префикс + "ЕдиницаЦены"     , Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"));
			//Дерево.Колонки.Добавить(Префикс + "ФлагЦены"        , Новый ОписаниеТипов("Булево"));
		}
		// Функция по параметру ТаблицаПоиска создает дерево и в нем нужные колонки

		public object СоздатьКолонкиДереваОстатков(/*ТаблицаПоиска = Неопределено, ВсеТипыЦен = Ложь*/)
		{
			//ДеревоОстатков = Новый ДеревоЗначений;
			//МассивБазовыхТиповЦен = Новый Массив;
			//МассивРассчитываемыхЦен = Новый Массив;
			//СформироватьМассивБазовыхТиповЦен(ТаблицаПоиска, МассивБазовыхТиповЦен, МассивРассчитываемыхЦен, ВсеТипыЦен);
			//ДеревоОстатков.Колонки.Добавить("ХарактеристикаСклад", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры,СправочникСсылка.Склады"));
			//ДеревоОстатков.Колонки.Добавить("МестоХранения"      , Новый ОписаниеТипов("Строка"));
			//ДеревоОстатков.Колонки.Добавить("Общий"              , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
			//ДеревоОстатков.Колонки.Добавить("Свободный"          , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
			//ДеревоОстатков.Колонки.Добавить("СвободныйОжидаемый" , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
			//ДеревоОстатков.Колонки.Добавить("ВРезерве"           , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
			/*// Тут колонки добавляются в том порядке в котором они идут в списке типов цен
*/
			if(true/*МассивБазовыхТиповЦен.Количество() > 0*/)
			{
				/*// колонки для Каждого типа цены
*/
			}
			return null;
		}
		// Процедура перекачивает поля сумм выборки в нужные колонки

		public void ЗаполнитьПоляСумм(/*СтрокаДерева, Выборка, СписокЦенОстатков, КурсыВалют*/)
		{
			/*// если цены не заданы - то ничего не делаем
*/
			if(true/*НЕ ЗначениеЗаполнено(Выборка.ТипЦен)*/)
			{
			}
			/*// в зависимости от типа цен помещаем данные в нужные колонки
*/
			//ПрефиксКолонки = ОпределитьПрефиксИмениКолонки(СписокЦенОстатков, Выборка.ТипЦен);
			if(true/*ЗначениеЗаполнено(ПрефиксКолонки)*/)
			{
				//ПолученнаяЦена = 0;
				//ПолученнаяЦена = Ценообразование.ОкруглитьЦену(Выборка.Цена, Выборка.ТипЦен.ПорядокОкругления, Выборка.ТипЦен.ОкруглятьВБольшуюСторону);
				//СтрокаДерева[ПрефиксКолонки + "ВалютаЦены"]          = Выборка.Валюта;
				//СтрокаДерева[ПрефиксКолонки + "ЦенаНоменклатуры"]    = ПолученнаяЦена;
				//СтруктураВалюты = ВернутьСтруктуруКурсВалюты(КурсыВалют, Выборка.Валюта);
				if(true/*СтруктураВалюты <> Неопределено*/)
				{
					//СтрокаДерева[ПрефиксКолонки + "КурсВалюты"]          = СтруктураВалюты.Курс;
					//СтрокаДерева[ПрефиксКолонки + "КратностьВалюты"]     = СтруктураВалюты.Кратность;
				}
				//СтрокаДерева[ПрефиксКолонки + "ЕдиницаЦены"]         = Выборка.ЕдиницаЦены;
				//СтрокаДерева[ПрефиксКолонки + "ФлагЦены"]            = Выборка.ФлагЦены;
			}
		}
		// Процедура перекачивает поля остатков выборки в нужные колонки

		public void ЗаполнитьПоляОстатков(/*СтрокаДерева, Выборка*/)
		{
			//СтрокаДерева.Общий               = Выборка.КоличествоОстаток;
			//СтрокаДерева.Свободный           = Выборка.КоличествоСвободныйОстаток;
			//СтрокаДерева.СвободныйОжидаемый  = ?(Выборка.КоличествоСвободныйОстатокВЗаказахПоставщикам > 0,Выборка.КоличествоСвободныйОстатокВЗаказахПоставщикам,СтрокаДерева.СвободныйОжидаемый);
			//СтрокаДерева.ВРезерве            = Выборка.КоличествоВРезерве;
		}
		// Процедура инициализирует поля остатков - нули им присваивает

		public void ИнициализироватьПоляОстатков(/*СтрокаДерева*/)
		{
			//СтрокаДерева.Общий               = 0;
			//СтрокаДерева.Свободный           = 0;
			//СтрокаДерева.ВРезерве            = 0;
		}
		// Процедура добавляет текущие остатки выборки к тем, которые имеются

		public void ДополнитьПоляОстатков(/*СтрокаДерева, Выборка*/)
		{
			//СтрокаДерева.Общий               = СтрокаДерева.Общий + Выборка.КоличествоОстаток;
			//СтрокаДерева.Свободный           = СтрокаДерева.Свободный + Выборка.КоличествоСвободныйОстаток;
			//СтрокаДерева.СвободныйОжидаемый  = СтрокаДерева.СвободныйОжидаемый + Выборка.КоличествоСвободныйОстатокВЗаказахПоставщикам;
			//СтрокаДерева.ВРезерве            = СтрокаДерева.ВРезерве + Выборка.КоличествоВРезерве;
		}
		// Процедура заполняет строку характеристики товара по выборе

		public void ЗаполнитьХарактеристикуТовара(/*СтрокаДерева, Выборка*/)
		{
			//СтрокаДерева.ХарактеристикаСклад = Выборка.ХарактеристикаНоменклатуры;
			//СтрокаДерева.СвободныйОжидаемый = Выборка.КоличествоСвободныйОстатокВЗаказахПоставщикам;
			//ИнициализироватьПоляОстатков(СтрокаДерева);
		}
		//Функция для Элемента формирует префикс

		public object СформироватьПрефиксДляЭлемента(/*Элемент*/)
		{
			//ПрефиксИмени = "А" + Элемент.УникальныйИдентификатор();
			//ЗначениеПрефикса = СтрЗаменить(ПрефиксИмени, "-", "_");
			return null;
		}
		// Функция формирует таблицу списока типов цен и дополнительной информации и них

		public object ЗаполнитьСписокТиповЦенДляПолученияОстатков(/**/)
		{
			//СписокЦенОстатков = Новый ТаблицаЗначений;
			//Запрос = Новый Запрос;
			/*Запрос.Текст = "
	 |ВЫБРАТЬ РАЗРЕШЕННЫЕ
	 |	ТипыЦенНоменклатуры.Ссылка,
	 |	ТипыЦенНоменклатуры.Наименование,
	 |  Выразить(" + """1""" + " КАК Строка(100))	Префикс,
	 |	ТипыЦенНоменклатуры.БазовыйТипЦен,
	 |	ТипыЦенНоменклатуры.Рассчитывается,
	 |	ТипыЦенНоменклатуры.ПроцентСкидкиНаценки,
	 |	ТипыЦенНоменклатуры.ОкруглятьВБольшуюСторону,
	 |	ТипыЦенНоменклатуры.ПорядокОкругления,
	 |	Ложь Пометка
	 |ИЗ
	 |	Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
	 |";*/
			//СписокЦенОстатков = Запрос.Выполнить().Выгрузить();
			return null;
		}
		// Функция возвращает структуру курса валюты

		public object ВернутьСтруктуруКурсВалюты(/*ДанныеКурсов, Валюта*/)
		{
			//СтруктураКурса = ДанныеКурсов[Валюта];
			if(true/*СтруктураКурса = Неопределено*/)
			{
				//СтруктураКурса = МодульВалютногоУчета.ПолучитьКурсВалюты(Валюта, ТекущаяДата());
				//ДанныеКурсов.Вставить(Валюта, СтруктураКурса);
			}
			return null;
		}
		// Процедура формирует дерево остатков номенклатуры на складах в разрезе характеристик номенклатуры
		//
		// Параметры
		//  Номенклатура     - СправочникСсылка.Номенклатура, номенклатурная позиция, для которой необходимо рассчитать остатки
		//  ОтображатьСклады - Булево, признак расчета остатков по складам
		//  СписокЦенОстатков - таблица для расчета сложных типов цен
		//
		// Возвращаемое значение:
		//   ДеревоЗначений, структура дерева описана в процедуре
		//   для Каждого типа цен будет создана своя колонка куда и будет помещена соответсвующая сумма
		//

		public void ПолучитьДеревоОстатковНоменклатуры(/*ДеревоОстатков, Номенклатура, ОтображатьСклады, 
											СписокЦенОстатков = Неопределено, ВсеТипыЦен = Ложь, 
											КурсыВалют, СписокСкладов = Неопределено*/)
		{
			//ДеревоОстатков.Строки.Очистить();
			//ТипыЦен = Новый Массив;
			//МассивРассчитываемыхЦен = Новый Массив;
			//СформироватьМассивБазовыхТиповЦен(СписокЦенОстатков, ТипыЦен, МассивРассчитываемыхЦен, ВсеТипыЦен);
			//ПолучатьЦены = (ТипыЦен.Количество() > 0);
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Номенклатура"        , Номенклатура);
			//Запрос.УстановитьПараметр("ПустаяХарактеристика", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойСклад"         , Справочники.Склады.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ТипыЦен"             , ТипыЦен);
			if(true/*ЗначениеЗаполнено(СписокСкладов)*/)
			{
				//Запрос.УстановитьПараметр("Склады"       	, СписокСкладов);
			}
			//ОграничениеПоСкладу = ?(НЕ ЗначениеЗаполнено(СписокСкладов), "", " И Склад В (&Склады) " );
			/*ТекстЗапроса = "
		|	ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|		ХарактеристикиНоменклатуры.Ссылка               КАК ХарактеристикаНоменклатуры
		|		" + ?(ОтображатьСклады,", ВложенныйЗапрос.Склад КАК Склад, АдресныйСклад.МестоХранения КАК МестоХранения","") + "
		|		, ВложенныйЗапрос.КоличествоОстаток             КАК КоличествоОстаток
		|		, ВложенныйЗапрос.КоличествоСвободныйОстаток    КАК КоличествоСвободныйОстаток
		|		, ВложенныйЗапрос.КоличествоВРезерве            КАК КоличествоВРезерве
		|		, 0                                             КАК КоличествоСвободныйОстатокВЗаказахПоставщикам
		|";*/
			if(true/*ПолучатьЦены*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
			|	,
			|	Цены.ФлагУсловийПоставки  КАК ФлагЦены,
			|	ЕСТЬNULL(Цены.Цена, 0.00) КАК Цена,
			|	Цены.Валюта               КАК Валюта,
			|	Цены.ЕдиницаИзмерения     КАК ЕдиницаЦены,
			|	1                         КАК КурсВалюты,
			|	1                         КАК КратностьВалюты,
			|	Цены.ТипЦен               КАК ТИПЦЕН
			|";*/
			}
			/*ТекстЗапроса = ТекстЗапроса + "
		|	ИЗ
		|	(
		|		ВЫБРАТЬ
		|			ХарактеристикиНоменклатуры.Ссылка   КАК Ссылка,
		|			ХарактеристикиНоменклатуры.Владелец КАК Владелец
		|		ИЗ
		|			Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
		|		ГДЕ
		|			ХарактеристикиНоменклатуры.Владелец = &Номенклатура
		|
		|		ОБЪЕДИНИТЬ
		|
		|		ВЫБРАТЬ
		|			ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка),
		|			&Номенклатура КАК Владелец
		|
		|		) КАК ХарактеристикиНоменклатуры
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	(ВЫБРАТЬ
		|		ВложенныйЗапрос.ХарактеристикаНоменклатуры                     КАК ХарактеристикаНоменклатуры
		|		" + ?(ОтображатьСклады,", ВложенныйЗапрос.Склад ","") + "
		|		, СУММА(ВложенныйЗапрос.ТоварыНаСкладахОстатки 
		|				+ ВложенныйЗапрос.ТоварыВРозницеОстатки 
		|				+ ВложенныйЗапрос.ТоварыВНТТОстатки)                   КАК КоличествоОстаток
		|		, СУММА(ВложенныйЗапрос.ТоварыНаСкладахОстатки
		|				+ ВложенныйЗапрос.ТоварыВРозницеОстатки
		|				+ ВложенныйЗапрос.ТоварыВНТТОстатки
		|				- ВложенныйЗапрос.ТоварыВРезервеСкладахОстатки
		|				- ВложенныйЗапрос.ТоварыКПередачеСоСкладовОстатки)     КАК КоличествоСвободныйОстаток
		|		, СУММА(ВложенныйЗапрос.ТоварыВРезервеСкладахОстатки)          КАК КоличествоВРезерве
		|	ИЗ
		|		(ВЫБРАТЬ
		|			ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры          КАК ХарактеристикаНоменклатуры
		|			, ТоварыНаСкладахОстатки.Склад                             КАК Склад
		|			, ТоварыНаСкладахОстатки.КоличествоОстаток                 КАК ТоварыНаСкладахОстатки
		|			, 0                                                        КАК ТоварыВРозницеОстатки
		|			, 0                                                        КАК ТоварыВНТТОстатки
		|			, 0                                                        КАК ТоварыВРезервеСкладахОстатки
		|			, 0                                                        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК ТоварыНаСкладахОстатки
					
		|		ОБЪЕДИНИТЬ ВСЕ
				
		|		ВЫБРАТЬ
		|			ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры           КАК ХарактеристикаНомнклатуры
		|			, ТоварыВРозницеОстатки.Склад                              КАК Склад
		|			, 0                                                        КАК ТоварыНаСкладахОстатки
		|			, ТоварыВРозницеОстатки.КоличествоОстаток                  КАК ТоварыВРозницеОстатки
		|			, 0                                                        КАК ТоварыВНТТОстатки
		|			, 0                                                        КАК ТоварыВРезервеСкладахОстатки
		|			, 0                                                        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.ТоварыВРознице.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК ТоварыВРозницеОстатки
					
		|		ОБЪЕДИНИТЬ ВСЕ
				
		|		ВЫБРАТЬ
		|			ТоварыВНТТОстатки.ХарактеристикаНоменклатуры               КАК ХарактеристикаНоменклатуры
		|			, ТоварыВНТТОстатки.Склад                                  КАК Склад
		|			, 0                                                        КАК ТоварыНаСкладахОстаток
		|			, 0                                                        КАК ТоварыВРозницеОстатки
		|			, ТоварыВНТТОстатки.КоличествоОстаток                      КАК ТоварыВНТТОстатки
		|			, 0                                                        КАК ТоварыВРезервеСкладахОстатки
		|			, 0                                                        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.ТоварыВНТТ.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК ТоварыВНТТОстатки
					
		|		ОБЪЕДИНИТЬ ВСЕ
				
		|		ВЫБРАТЬ
		|			ТоварыВРезервеСкладахОстатки.ХарактеристикаНоменклатуры    КАК ХарактеристикаНоменклатуры
		|			, ТоварыВРезервеСкладахОстатки.Склад                       КАК Склад
		|			, 0                                                        КАК ТоварыНаСкладахОстатки
		|			, 0                                                        КАК ТоварыВРозницеОстатки
		|			, 0                                                        КАК ТоварыВНТТОстатки
		|			, ТоварыВРезервеСкладахОстатки.КоличествоОстаток           КАК ТоварыВРезервеСкладахОстатки
		|			, 0                                                        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК ТоварыВРезервеСкладахОстатки
					
		|		ОБЪЕДИНИТЬ ВСЕ
				
		|		ВЫБРАТЬ
		|			ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
		|			, ТоварыКПередачеСоСкладовОстатки.Склад                    КАК Склад
		|			, 0                                                        КАК ТоварыНаСкладахОстатки
		|			, 0                                                        КАК ТоварыВРозницеОстатки
		|			, 0                                                        КАК ТоварыВНТТОстатки
		|			, 0                                                        КАК ТоварыВРезервеСкладахОстатки
		|			, ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК ТоварыКПередачеСоСкладовОстатки
					
		|		) КАК ВложенныйЗапрос
		|	СГРУППИРОВАТЬ ПО ВложенныйЗапрос.ХарактеристикаНоменклатуры " + ?(ОтображатьСклады,", ВложенныйЗапрос.Склад","") + "
		|	) КАК ВложенныйЗапрос
		|ПО ХарактеристикиНоменклатуры.Ссылка = ВложенныйЗапрос.ХарактеристикаНоменклатуры
		|";*/
			if(true/*ОтображатьСклады*/)
			{
				//ОграничениеЗапросаПоСкладу = ?(НЕ ЗначениеЗаполнено(СписокСкладов), "", Символы.ПС + "И МестаХраненияНоменклатуры.Склад В (&Склады) " );
				/*ТекстЗапроса = ТекстЗапроса + "
		|	ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 
		|	МестаХраненияНоменклатуры.МестоХранения КАК МестоХранения,
		|	МестаХраненияНоменклатуры.Склад КАК Склад,
		|	МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
		|	МестаХраненияНоменклатуры.Приоритет КАК Приоритет
		|ИЗ
		|	РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
		|ГДЕ
		|	МестаХраненияНоменклатуры.Номенклатура = &Номенклатура "+ ОграничениеЗапросаПоСкладу + " ) КАК АдресныйСклад
		|	ПО
		|		АдресныйСклад.Склад = ВложенныйЗапрос.Склад
		|";*/
			}
			if(true/*ПолучатьЦены*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
		|
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|(
		|ВЫБРАТЬ ЦеныНаБазовыйТип.Номенклатура,
		| 		ЦеныНаБазовыйТип.ХарактеристикаНоменклатуры,
		|		ВЫБОР	КОГДА ЦеныНаБазовыйТип.Рассчитывается
		|				ТОГДА
		|					ВЫБОР	КОГДА ЦеныНаБазовыйТип.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
		|							ТОГДА ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00) + ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00) * (ЦеныНаБазовыйТип.ПроцентСкидкиНаценки /100)
		|							ИНАЧЕ ЕСТЬNULL(ЦенаПоДиапазону.Цена, 0.00)
		|					КОНЕЦ
		|				ИНАЧЕ ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00)
		|		КОНЕЦ КАК Цена,
		|		ВЫБОР 	КОГДА ЦеныНаБазовыйТип.Рассчитывается
		|				ТОГДА
		|					ВЫБОР 	КОГДА ЦеныНаБазовыйТип.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
		|							ТОГДА ЦеныНаБазовыйТип.Валюта
		|							ИНАЧЕ ЦенаПоДиапазону.Валюта
		|						КОНЕЦ
		|				ИНАЧЕ ЦеныНаБазовыйТип.Валюта
		|		КОНЕЦ КАК Валюта,
		|		ВЫБОР	КОГДА ЦеныНаБазовыйТип.Рассчитывается
		|				ТОГДА
		|					ВЫБОР	КОГДА ЦеныНаБазовыйТип.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
		|							ТОГДА ЦеныНаБазовыйТип.ЕдиницаИзмерения
		|							ИНАЧЕ ЦенаПоДиапазону.ЕдиницаИзмерения
		|					КОНЕЦ
		|				ИНАЧЕ ЦеныНаБазовыйТип.ЕдиницаИзмерения
		|		КОНЕЦ КАК ЕдиницаИзмерения,
		|		ЛОЖЬ КАК ФлагУсловийПоставки,
		|		ЦеныНаБазовыйТип.Рассчитывается,
		|		ЦеныНаБазовыйТип.ТипЦенБазовыйДинамический КАК ТипЦен
		| ИЗ
		|(
		|	ВЫБРАТЬ
		|		НоменклатураХарактеристикаТипЦены.Номенклатура,
		|		НоменклатураХарактеристикаТипЦены.ХарактеристикаНоменклатуры,
		|		ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается
		|				ТОГДА 	ВЫБОР 	КОГДА ЕСТЬNULL(КурсВалют.Кратность, 0.00) = 0 ИЛИ ЕСТЬNULL(КурсВалютДинамическийТип.Курс, 0.00) = 0
		|								ТОГДА 0.00
		|								ИНАЧЕ ЕСТЬNULL(ЕСТЬNULL(ЦеныНоменклатуры.Цена, ЦеныНоменклатурыПустаяХарактеристика.Цена), 0.00)
		|									  * ЕСТЬNULL(КурсВалют.Курс, 0.00)
		|									  * ЕСТЬNULL(КурсВалютДинамическийТип.Кратность, 0.00)
		|									  / КурсВалют.Кратность
		|									  / КурсВалютДинамическийТип.Курс
		|						КОНЕЦ
		|				ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатуры.Цена, ЦеныНоменклатурыПустаяХарактеристика.Цена)
		|		КОНЕЦ КАК Цена,
		|		ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается
		|				ТОГДА 	ВЫБОР 	КОГДА ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.СпособРасчетаЦены, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.СпособРасчетаЦены) ЕСТЬ NULL
		|				                ТОГДА ТипЦенНоменклаутры.СпособРасчетаЦены
		|				                ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.СпособРасчетаЦены, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.СпособРасчетаЦены)
		|				        КОНЕЦ
		|				ИНАЧЕ NULL
		|		КОНЕЦ КАК СпособРасчета,
		|		ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается
		|				ТОГДА 	ВЫБОР 	КОГДА ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.ПроцентСкидкиНаценки, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.ПроцентСкидкиНаценки) ЕСТЬ NULL
		|				                ТОГДА ТипЦенНоменклаутры.ПроцентСкидкиНаценки
		|				                ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.ПроцентСкидкиНаценки, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.ПроцентСкидкиНаценки)
		|				        КОНЕЦ
		|				ИНАЧЕ NULL
		|		КОНЕЦ КАК ПроцентСкидкиНаценки,
		|		ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается
		|				ТОГДА ЕСТЬNULL(ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.Валюта, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.Валюта), ТипЦенНоменклаутры.ВалютаЦены)
		|				ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатуры.Валюта, ЦеныНоменклатурыПустаяХарактеристика.Валюта)
		|		КОНЕЦ КАК Валюта,
		|		КурсВалютДинамическийТип.Валюта КАК ВалютаДинамическийТип,
		|		ЕСТЬNULL(ЕСТЬNULL(ЦеныНоменклатуры.ЕдиницаИзмерения, ЦеныНоменклатурыПустаяХарактеристика.ЕдиницаИзмерения), НоменклатураХарактеристикаТипЦены.ЕдиницаХраненияОстатков) КАК ЕдиницаИзмерения,
		|		НоменклатураХарактеристикаТипЦены.ТипЦен,
		|		НоменклатураХарактеристикаТипЦены.ТипЦенБазовыйДинамический,
		|		НоменклатураХарактеристикаТипЦены.Рассчитывается
		|	ИЗ
		|	(
		|		ВЫБРАТЬ
		|			НоменклатураХарактеристикаТипЦены.Номенклатура,
		|			НоменклатураХарактеристикаТипЦены.ХарактеристикаНоменклатуры,
		|			НоменклатураХарактеристикаТипЦены.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков,
		|			ВЫБОР 	КОГДА СпрТипЦены.Рассчитывается
		|					ТОГДА СпрТипЦены.БазовыйТипЦен
		|					ИНАЧЕ СпрТипЦены.Ссылка
		|			КОНЕЦ КАК ТипЦен,
		|			СпрТипЦены.Ссылка КАК ТипЦенБазовыйДинамический,
		|			СпрТипЦены.Рассчитывается
		|		ИЗ
		|		(
		|			ВЫБРАТЬ НоменклатураХарактеристика.Номенклатура,
		|					НоменклатураХарактеристика.ХарактеристикаНоменклатуры,
		|					СпрНомеклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков,
		|					сТипыЦенНоменклатуры.Ссылка КАК ТипЦен
		|			ИЗ
		|			(
		|				ВЫБРАТЬ	
		|					Характеристики.Владелец КАК Номенклатура,
		|					Характеристики.Ссылка КАК ХарактеристикаНоменклатуры
		|				ИЗ
		|					Справочник.ХарактеристикиНоменклатуры КАК Характеристики
		|					ГДЕ Характеристики.Владелец = &Номенклатура
		|				ОБЪЕДИНИТЬ
		|				ВЫБРАТЬ 
		|						&Номенклатура КАК Номенклатура,
		|						ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
		|			) КАК НоменклатураХарактеристика
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|				Справочник.Номенклатура КАК СпрНомеклатура
		|			ПО
		|				СпрНомеклатура.Ссылка = НоменклатураХарактеристика.Номенклатура
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|				Справочник.ТипыЦенНоменклатуры КАК сТипыЦенНоменклатуры
		|			ПО ИСТИНА
		|			ГДЕ
		|				сТипыЦенНоменклатуры.Ссылка В (&ТипыЦен)
		|		) КАК НоменклатураХарактеристикаТипЦены
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|			Справочник.ТипыЦенНоменклатуры КАК СпрТипЦены
		|		ПО
		|			СпрТипЦены.Ссылка = НоменклатураХарактеристикаТипЦены.ТипЦен
		|	) КАК НоменклатураХарактеристикаТипЦены
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатуры
		|	ПО
		|		ЦеныНоменклатуры.Номенклатура = НоменклатураХарактеристикаТипЦены.Номенклатура
		|		И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = НоменклатураХарактеристикаТипЦены.ХарактеристикаНоменклатуры
		|		И ЦеныНоменклатуры.ТипЦен = НоменклатураХарактеристикаТипЦены.ТипЦен
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыПустаяХарактеристика
		|	ПО
		|		ЦеныНоменклатурыПустаяХарактеристика.Номенклатура = НоменклатураХарактеристикаТипЦены.Номенклатура
		|		И ЦеныНоменклатурыПустаяХарактеристика.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
		|		И ЦеныНоменклатурыПустаяХарактеристика.ТипЦен = НоменклатураХарактеристикаТипЦены.ТипЦен
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыДинамическийТип
		|	ПО
		|		ЦеныНоменклатурыДинамическийТип.Номенклатура = НоменклатураХарактеристикаТипЦены.Номенклатура
		|		И ЦеныНоменклатурыДинамическийТип.ХарактеристикаНоменклатуры = НоменклатураХарактеристикаТипЦены.ХарактеристикаНоменклатуры
		|		И ЦеныНоменклатурыДинамическийТип.ТипЦен = НоменклатураХарактеристикаТипЦены.ТипЦенБазовыйДинамический
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип
		|	ПО
		|		ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.Номенклатура = НоменклатураХарактеристикаТипЦены.Номенклатура
		|		И ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
		|		И ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.ТипЦен = НоменклатураХарактеристикаТипЦены.ТипЦенБазовыйДинамический
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.КурсыВалют.СрезПоследних() КАК КурсВалют
		|	ПО
		|		КурсВалют.Валюта = ЕСТЬNULL(ЦеныНоменклатуры.Валюта, ЦеныНоменклатурыПустаяХарактеристика.Валюта)
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		Справочник.ТипыЦенНоменклатуры КАК ТипЦенНоменклаутры
		|	ПО 
		|		ТипЦенНоменклаутры.Ссылка = НоменклатураХарактеристикаТипЦены.ТипЦенБазовыйДинамический
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.КурсыВалют.СрезПоследних() КАК КурсВалютДинамическийТип
		|	ПО
		|		КурсВалютДинамическийТип.Валюта = 	ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается И ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.Валюта, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.Валюта) ЕСТЬ NULL
		|													ТОГДА ТипЦенНоменклаутры.ВалютаЦены
		|													ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.Валюта, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.Валюта)
		|											КОНЕЦ
		|) КАК ЦеныНаБазовыйТип
		|//Динамический тип цен
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|(
		|	ВЫБРАТЬ
		|	        ДинамическийТипЦен.Номенклатура
		|	      , ДинамическийТипЦен.ХарактеристикаНоменклатуры
		|	      , ДинамическийТипЦен.ДинамическийТип КАК БазовыйТипЦен
		|	      , ДинамическийТипЦен.ЕдиницаИзмерения КАК ЕдиницаИзмерения
		|	      , ЕСТЬNULL(ЦенаПоДиапазону.Цена, 0.00) КАК Цена
		|	      , ЦенаПоДиапазону.Валюта
		|	ИЗ
		|	(
		|		ВЫБРАТЬ  ЦенаДляРасчетаДиапазона.Номенклатура,
		|			ЦенаДляРасчетаДиапазона.ХарактеристикаНоменклатуры,		
		|	  		ЦенаДляРасчетаДиапазона.ДинамическийТип,
		|	  		МИНИМУМ(ЦенаПоДиапазону.Валюта) КАК Валюта,
		|	  		МИНИМУМ(ЦенаДляРасчетаДиапазона.ЕдиницаИзмерения) КАК ЕдиницаИзмерения,
		|	  		МИНИМУМ(ЦенаПоДиапазону.ВерхняяГраница) КАК Цена
		|	ИЗ
		|	(
		|		ВЫБРАТЬ
		|			НомеклатураХарактеристикаТип.Номенклатура КАК Номенклатура,
		|			НомеклатураХарактеристикаТип.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
		|			ЕСТЬNULL(ЕСТЬNULL(ЦеныБазовые.Цена, ЦеныБазовыеПустаяХарактеристика.Цена), 0.00) КАК Цена,
		|			ЕСТЬNULL(ЦеныБазовые.ТипЦен, ЦеныБазовыеПустаяХарактеристика.ТипЦен) КАК ДинамическийТип,
		|			ЕСТЬNULL(ЦеныБазовые.ЕдиницаИзмерения, ЦеныБазовыеПустаяХарактеристика.ЕдиницаИзмерения) КАК ЕдиницаИзмерения
		|		ИЗ
		|		(
		|			ВЫБРАТЬ	
		|				Характеристики.Владелец КАК Номенклатура,
		|				Характеристики.Ссылка КАК ХарактеристикаНоменклатуры
		|			ИЗ
		|				Справочник.ХарактеристикиНоменклатуры КАК Характеристики
		|			ГДЕ Характеристики.Владелец = &Номенклатура
		|			ОБЪЕДИНИТЬ
		|			ВЫБРАТЬ 
		|					&Номенклатура КАК Номенклатура,
		|					ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
		|		) КАК НомеклатураХарактеристикаТип
		|		ЛЕВОЕ СОЕДИНЕНИЕ
		|			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура И (НЕ ТипЦен.Рассчитывается И ТипЦен В (&ТипыЦен))) КАК ЦеныБазовые
		|		ПО
		|			ЦеныБазовые.Номенклатура = НомеклатураХарактеристикаТип.Номенклатура
		|			И ЦеныБазовые.ХарактеристикаНоменклатуры = НомеклатураХарактеристикаТип.ХарактеристикаНоменклатуры
		|		ЛЕВОЕ СОЕДИНЕНИЕ
		|			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура И (НЕ ТипЦен.Рассчитывается И ТипЦен В (&ТипыЦен))) КАК ЦеныБазовыеПустаяХарактеристика
		|		ПО
		|			ЦеныБазовыеПустаяХарактеристика.Номенклатура = НомеклатураХарактеристикаТип.Номенклатура
		|			И ЦеныБазовыеПустаяХарактеристика.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
		|		ГДЕ
		|			НЕ ЕСТЬNULL(ЦеныБазовые.ТипЦен, ЦеныБазовыеПустаяХарактеристика.ТипЦен) ЕСТЬ NULL
		|	) КАК ЦенаДляРасчетаДиапазона
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|	(
		|		ВЫБРАТЬ  Диапазон.Валюта
		|				,ТипыЦен.БазовыйТипЦен КАК ТипЦен
		|				, Диапазон.Цена
		|				, Диапазон.ВерхняяГраница
		|		ИЗ
		|			РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(,) КАК Диапазон 
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|		(	
		|			ВЫБРАТЬ	ТипЦен
		|					, МАКСИМУМ(Период) КАК Период
		|			ИЗ РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(, ) КАК Диапазон 
		|			СГРУППИРОВАТЬ ПО Диапазон.ТипЦен
		|		) КАК Диапазон2
		|		ПО Диапазон2.ТипЦен = Диапазон.ТипЦен И Диапазон2.Период = Диапазон.Период
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|			Справочник.ТипыЦенНоменклатуры КАК ТипыЦен
		|		ПО
		|			ТипыЦен.Ссылка = Диапазон.ТипЦен
		|	) КАК ЦенаПоДиапазону
		|	ПО
		|		ЦенаПоДиапазону.ТипЦен = ЦенаДляРасчетаДиапазона.ДинамическийТип
		|		И ЦенаПоДиапазону.ВерхняяГраница > ЦенаДляРасчетаДиапазона.Цена
		|	ГДЕ
		|		НЕ ЦенаПоДиапазону.ВерхняяГраница ЕСТЬ NULL	
		|	СГРУППИРОВАТЬ ПО ЦенаДляРасчетаДиапазона.ДинамическийТип
		|					, ЦенаДляРасчетаДиапазона.ХарактеристикаНоменклатуры
		|					, ЦенаДляРасчетаДиапазона.Номенклатура	
							
		|	) КАК ДинамическийТипЦен
		|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|	(	
		|		ВЫБРАТЬ  Диапазон.Валюта
		|				, ТипыЦен.БазовыйТипЦен КАК ТипЦен
		|				, Диапазон.Цена
		|				, Диапазон.ВерхняяГраница
		|		ИЗ
		|			РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(,) КАК Диапазон 
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|			Справочник.ТипыЦенНоменклатуры КАК ТипыЦен
		|		ПО
		|			ТипыЦен.Ссылка = Диапазон.ТипЦен
		|	) КАК ЦенаПоДиапазону
		|	ПО
		|		ЦенаПоДиапазону.ТипЦен = ДинамическийТипЦен.ДинамическийТип
		|		И ЦенаПоДиапазону.ВерхняяГраница = ДинамическийТипЦен.Цена
		|) КАК ЦенаПоДиапазону
		|ПО
		|	ЦенаПоДиапазону.БазовыйТипЦен = ЦеныНаБазовыйТип.ТипЦен
		|	И ЦенаПоДиапазону.Номенклатура = ЦеныНаБазовыйТип.Номенклатура
		|	И ЦенаПоДиапазону.ХарактеристикаНоменклатуры = ЦеныНаБазовыйТип.ХарактеристикаНоменклатуры
		|ГДЕ
		|	ВЫБОР	КОГДА ЦеныНаБазовыйТип.Рассчитывается
		|			ТОГДА
		|				ВЫБОР 	КОГДА ЦеныНаБазовыйТип.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
		|						ТОГДА ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00) + ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00) * (ЦеныНаБазовыйТип.ПроцентСкидкиНаценки /100)
		|						ИНАЧЕ ЕСТЬNULL(ЦенаПоДиапазону.Цена, 0.00)
		|				КОНЕЦ
		|			ИНАЧЕ ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00)
		|	КОНЕЦ > 0
		|) КАК Цены
		|ПО
		|	Цены.Номенклатура = ХарактеристикиНоменклатуры.Владелец
		|	И Цены.ХарактеристикаНоменклатуры = ХарактеристикиНоменклатуры.Ссылка
		|";*/
			}
			/*ТекстЗапроса = ТекстЗапроса + "
		|		ОБЪЕДИНИТЬ ВСЕ
				
		|		ВЫБРАТЬ
		|			ЗаказаныйТовар.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
		|			 " + ?(ОтображатьСклады,", ""НеВыводить"" КАК Склад, ""НеВыводить"" КАК МестоХранения ","") + "
		|			, 0 КАК КоличествоОстаток
		|			, 0 КАК КоличествоСвободныйОстаток
		|			, 0 КАК КоличествоВРезерве
		|			, ЗаказаныйТовар.КоличествоОстаток КАК КоличествоСвободныйОстатокВЗаказахПоставщикам";*/
			if(true/*ПолучатьЦены*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
			|	,
			|	0  КАК ФлагЦены,
			|	0 КАК Цена,
			|	0 КАК Валюта,
			|	0 КАК ЕдиницаЦены,
			|	0 КАК КурсВалюты,
			|	0 КАК КратностьВалюты,
			|	NULL КАК ТИПЦЕН";*/
			}
			/*ТекстЗапроса = ТекстЗапроса + "
		|		ИЗ
		|			(
		|				ВЫБРАТЬ
		|					ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
		|					СУММА(ЕСТЬNULL(ЗаказыПоставщикамОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(РазмещениеЗаказовПокупателейОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток
		|				ИЗ
		|					РегистрНакопления.ЗаказыПоставщикам.Остатки(, Номенклатура = &Номенклатура) КАК ЗаказыПоставщикамОстатки
		|				ЛЕВОЕ СОЕДИНЕНИЕ
		|					РегистрНакопления.РазмещениеЗаказовПокупателей.Остатки(, Номенклатура = &Номенклатура) КАК РазмещениеЗаказовПокупателейОстатки
		|				ПО
		|					РазмещениеЗаказовПокупателейОстатки.ЗаказПоставщику = ЗаказыПоставщикамОстатки.ЗаказПоставщику
		|					И ЗаказыПоставщикамОстатки.Номенклатура = РазмещениеЗаказовПокупателейОстатки.Номенклатура
		|					И ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры = РазмещениеЗаказовПокупателейОстатки.ХарактеристикаНоменклатуры
		|				СГРУППИРОВАТЬ ПО
		|					ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры
		|			) КАК ЗаказаныйТовар
		|		ГДЕ ЕСТЬNULL(ЗаказаныйТовар.КоличествоОстаток , 0.00) > 0
		|";*/
			if(true/*ОтображатьСклады*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
		|	УПОРЯДОЧИТЬ ПО
		|		ХарактеристикаНоменклатуры,
		|		Склад
		|		//,АдресныйСклад.Приоритет
		|	ИТОГИ 	СУММА(КоличествоСвободныйОстатокВЗаказахПоставщикам) ПО
		|	ХарактеристикаНоменклатуры,
		|	Склад,
		|	МестоХранения
		|";*/
			}
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			/*// ничего не выбрали - нечего и обрабатывать
*/
			if(true/*РезультатЗапроса.Пустой()*/)
			{
				//СтрокаХарактеристика = ДеревоОстатков.Строки.Добавить();
			}
			if(true/*ОтображатьСклады*/)
			{
				/*// отображение результатов с итогами по Характеристикам и Складам
*/
				//ВыборкаХарактеристика = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ХарактеристикаНоменклатуры");
				while(true/*ВыборкаХарактеристика.Следующий()*/)
				{
					//СтрокаХарактеристика = ДеревоОстатков.Строки.Добавить();
					//ЗаполнитьХарактеристикуТовара(СтрокаХарактеристика, ВыборкаХарактеристика);
					//ВыборкаСклад = ВыборкаХарактеристика.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
					while(true/*ВыборкаСклад.Следующий()*/)
					{
						if(true/*ВыборкаСклад.Склад = "НеВыводить"*/)
						{
						}
						if(true/*ЗначениеЗаполнено(ВыборкаСклад.Склад)*/)
						{
							//СтрокаСклад = СтрокаХарактеристика.Строки.Добавить();
							//СтрокаСклад.ХарактеристикаСклад = ВыборкаСклад.Склад;
						}
						//ПервыйПроходМестХранения = Истина;
						//ВыборкаМестаХранения = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "МестоХранения");
						while(true/*ВыборкаМестаХранения.Следующий()*/)
						{
							if(true/*ПервыйПроходМестХранения*/)
							{
								//ВыборкаДетальных = ВыборкаМестаХранения.Выбрать();
								if(true/*ВыборкаДетальных.Следующий()*/)
								{
									/*// остатки везде одинаковые
*/
									if(true/*ЗначениеЗаполнено(ВыборкаСклад.Склад)*/)
									{
										//ЗаполнитьПоляОстатков(СтрокаСклад, ВыборкаДетальных);
										/*// для итогов еще более верхнего уровня дополняем суммы
*/
										//ДополнитьПоляОстатков(СтрокаХарактеристика, ВыборкаДетальных);
									}
									/*// в разрезе цен заполняем
*/
									if(true/*ПолучатьЦены*/)
									{
										//ЗаполнитьПоляСумм(СтрокаХарактеристика, ВыборкаДетальных, СписокЦенОстатков, КурсыВалют);
										while(true/*ВыборкаДетальных.Следующий()*/)
										{
											if(true/*ПолучатьЦены*/)
											{
												//ЗаполнитьПоляСумм(СтрокаХарактеристика, ВыборкаДетальных, СписокЦенОстатков, КурсыВалют);
											}
										}
										//;;
									}
								}
							}
							if(true/*ЗначениеЗаполнено(ВыборкаМестаХранения.МестоХранения)*/)
							{
								//СтрокаСклад.МестоХранения = ?(ПустаяСтрока(СтрокаСклад.МестоХранения), "", СтрокаСклад.МестоХранения + "; ") + ВыборкаМестаХранения.МестоХранения;
							}
							//ПервыйПроходМестХранения = Ложь;
						}
						//;;
					}
					//;;
				}
				//;;
			}
		}
		// ПолучитьНовДеревоОстатковНоменклатуры()
		// Процедура формирует дерево остатков номенклатуры на складах в разрезе характеристик номенклатуры по данным регистра "СвободныеОстатки"
		//
		// Параметры
		//  Номенклатура     - СправочникСсылка.Номенклатура, номенклатурная позиция, для которой необходимо рассчитать остатки
		//  ОтображатьСклады - Булево, признак расчета остатков по складам
		//  СписокЦенОстатков - таблица для расчета сложных типов цен
		//
		// Возвращаемое значение:
		//   ДеревоЗначений, структура дерева описана в процедуре
		//   для Каждого типа цен будет создана своя колонка куда и будет помещена соответсвующая сумма
		//

		public void ПолучитьДеревоОстатковНоменклатурыСвободныеОстатки(/*ДеревоОстатков, Номенклатура, ОтображатьСклады, 
											СписокЦенОстатков = Неопределено, ВсеТипыЦен = Ложь, 
											КурсыВалют, СписокСкладов = Неопределено*/)
		{
			//ДеревоОстатков.Строки.Очистить();
			//ТипыЦен = Новый Массив;
			//МассивРассчитываемыхЦен = Новый Массив;
			//СформироватьМассивБазовыхТиповЦен(СписокЦенОстатков, ТипыЦен, МассивРассчитываемыхЦен, ВсеТипыЦен);
			//ПолучатьЦены = (ТипыЦен.Количество() > 0);
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Номенклатура"        , Номенклатура);
			//Запрос.УстановитьПараметр("ПустаяХарактеристика", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустойСклад"         , Справочники.Склады.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ТипыЦен"             , ТипыЦен);
			if(true/*ЗначениеЗаполнено(СписокСкладов)*/)
			{
				//Запрос.УстановитьПараметр("Склады"       	, СписокСкладов);
			}
			//ОграничениеПоСкладу = ?(НЕ ЗначениеЗаполнено(СписокСкладов), "", " И Склад В (&Склады) " );
			/*ТекстЗапроса = "
		|	ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|		ХарактеристикиНоменклатуры.Ссылка               КАК ХарактеристикаНоменклатуры
		|		" + ?(ОтображатьСклады,", ВложенныйЗапрос.Склад КАК Склад, АдресныйСклад.МестоХранения КАК МестоХранения","") + "
		|		, ВложенныйЗапрос.КоличествоОстаток             КАК КоличествоОстаток
		|		, ВложенныйЗапрос.КоличествоСвободныйОстаток    КАК КоличествоСвободныйОстаток
		|		, ВложенныйЗапрос.КоличествоВРезерве            КАК КоличествоВРезерве
		|		, 0                                             КАК КоличествоСвободныйОстатокВЗаказахПоставщикам
		|";*/
			if(true/*ПолучатьЦены*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
			|	,
			|	Цены.ФлагУсловийПоставки  КАК ФлагЦены,
			|	ЕСТЬNULL(Цены.Цена, 0.00) КАК Цена,
			|	Цены.Валюта               КАК Валюта,
			|	Цены.ЕдиницаИзмерения     КАК ЕдиницаЦены,
			|	1                         КАК КурсВалюты,
			|	1                         КАК КратностьВалюты,
			|	Цены.ТипЦен               КАК ТИПЦЕН
			|";*/
			}
			/*ТекстЗапроса = ТекстЗапроса + "
		|	ИЗ
		|	(
		|		ВЫБРАТЬ
		|			ХарактеристикиНоменклатуры.Ссылка   КАК Ссылка,
		|			ХарактеристикиНоменклатуры.Владелец КАК Владелец
		|		ИЗ
		|			Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
		|		ГДЕ
		|			ХарактеристикиНоменклатуры.Владелец = &Номенклатура
		|
		|		ОБЪЕДИНИТЬ
		|
		|		ВЫБРАТЬ
		|			ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка),
		|			&Номенклатура КАК Владелец
		|
		|		) КАК ХарактеристикиНоменклатуры
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	(ВЫБРАТЬ
		|		ВложенныйЗапрос.ХарактеристикаНоменклатуры                     КАК ХарактеристикаНоменклатуры
		|		" + ?(ОтображатьСклады,", ВложенныйЗапрос.Склад ","") + "

		//Полный остаток состоит из свободного на оптовых и розничных складах + резерв + к передаче + НТТ
		|		, СУММА(ВложенныйЗапрос.СвободныеОстатки 
		|				+ ВложенныйЗапрос.ТоварыВНТТОстатки
		|				+ ВложенныйЗапрос.ТоварыВРезервеСкладахОстатки
		|				+ ВложенныйЗапрос.ТоварыКПередачеСоСкладовОстатки)     КАК КоличествоОстаток
		
		//В свободный остаток необходимо включать остаток в НТТ
		|		, СУММА(ВложенныйЗапрос.СвободныеОстатки
		|				+ ВложенныйЗапрос.ТоварыВНТТОстатки)				   КАК КоличествоСвободныйОстаток

		|		, СУММА(ВложенныйЗапрос.ТоварыВРезервеСкладахОстатки)          КАК КоличествоВРезерве
		|	ИЗ
		|		(ВЫБРАТЬ
		|			СвободныеОстатки.ХарактеристикаНоменклатуры          	   КАК ХарактеристикаНоменклатуры
		|			, СвободныеОстатки.Склад                             	   КАК Склад
		|			, СвободныеОстатки.КоличествоОстаток                 	   КАК СвободныеОстатки
		|			, 0                                                        КАК ТоварыВНТТОстатки
		|			, 0                                                        КАК ТоварыВРезервеСкладахОстатки
		|			, 0                                                        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК СвободныеОстатки
        |
		|		ОБЪЕДИНИТЬ ВСЕ
		|		
		|		ВЫБРАТЬ
		|			ТоварыВНТТОстатки.ХарактеристикаНоменклатуры               КАК ХарактеристикаНоменклатуры
		|			, ТоварыВНТТОстатки.Склад                                  КАК Склад
		|			, 0                                                        КАК СвободныеОстатки
		|			, ТоварыВНТТОстатки.КоличествоОстаток                      КАК ТоварыВНТТОстатки
		|			, 0                                                        КАК ТоварыВРезервеСкладахОстатки
		|			, 0                                                        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.ТоварыВНТТ.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК ТоварыВНТТОстатки
		
		|		ОБЪЕДИНИТЬ ВСЕ
				
		|		ВЫБРАТЬ
		|			ТоварыВРезервеСкладахОстатки.ХарактеристикаНоменклатуры    КАК ХарактеристикаНоменклатуры
		|			, ТоварыВРезервеСкладахОстатки.Склад                       КАК Склад
		|			, 0                                                        КАК СвободныеОстатки
		|			, 0                                                        КАК ТоварыВНТТОстатки
		|			, ТоварыВРезервеСкладахОстатки.КоличествоОстаток           КАК ТоварыВРезервеСкладахОстатки
		|			, 0                                                        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК ТоварыВРезервеСкладахОстатки
		|			
		|		ОБЪЕДИНИТЬ ВСЕ
		|		
		|		ВЫБРАТЬ
		|			ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
		|			, ТоварыКПередачеСоСкладовОстатки.Склад                    КАК Склад
		|			, 0                                                        КАК СвободныеОстатки
		|			, 0                                                        КАК ТоварыВНТТОстатки
		|			, 0                                                        КАК ТоварыВРезервеСкладахОстатки
		|			, ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток        КАК ТоварыКПередачеСоСкладовОстатки
		|		ИЗ
		|			РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, Номенклатура = &Номенклатура" + ОграничениеПоСкладу + ") КАК ТоварыКПередачеСоСкладовОстатки
					
		|		) КАК ВложенныйЗапрос
		|	СГРУППИРОВАТЬ ПО ВложенныйЗапрос.ХарактеристикаНоменклатуры " + ?(ОтображатьСклады,", ВложенныйЗапрос.Склад","") + "
		|	) КАК ВложенныйЗапрос
		|ПО ХарактеристикиНоменклатуры.Ссылка = ВложенныйЗапрос.ХарактеристикаНоменклатуры
		|";*/
			if(true/*ОтображатьСклады*/)
			{
				//ОграничениеЗапросаПоСкладу = ?(НЕ ЗначениеЗаполнено(СписокСкладов), "", Символы.ПС + "И МестаХраненияНоменклатуры.Склад В (&Склады) " );
				/*ТекстЗапроса = ТекстЗапроса + "
		|	ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 
		|	МестаХраненияНоменклатуры.МестоХранения КАК МестоХранения,
		|	МестаХраненияНоменклатуры.Склад КАК Склад,
		|	МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
		|	МестаХраненияНоменклатуры.Приоритет КАК Приоритет
		|ИЗ
		|	РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
		|ГДЕ
		|	МестаХраненияНоменклатуры.Номенклатура = &Номенклатура "+ ОграничениеЗапросаПоСкладу + " ) КАК АдресныйСклад
		|	ПО
		|		АдресныйСклад.Склад = ВложенныйЗапрос.Склад
		|";*/
			}
			if(true/*ПолучатьЦены*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
		|
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|(
		|ВЫБРАТЬ ЦеныНаБазовыйТип.Номенклатура,
		| 		ЦеныНаБазовыйТип.ХарактеристикаНоменклатуры,
		|		ВЫБОР	КОГДА ЦеныНаБазовыйТип.Рассчитывается
		|				ТОГДА
		|					ВЫБОР	КОГДА ЦеныНаБазовыйТип.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
		|							ТОГДА ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00) + ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00) * (ЦеныНаБазовыйТип.ПроцентСкидкиНаценки /100)
		|							ИНАЧЕ ЕСТЬNULL(ЦенаПоДиапазону.Цена, 0.00)
		|					КОНЕЦ
		|				ИНАЧЕ ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00)
		|		КОНЕЦ КАК Цена,
		|		ВЫБОР 	КОГДА ЦеныНаБазовыйТип.Рассчитывается
		|				ТОГДА
		|					ВЫБОР 	КОГДА ЦеныНаБазовыйТип.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
		|							ТОГДА ЦеныНаБазовыйТип.Валюта
		|							ИНАЧЕ ЦенаПоДиапазону.Валюта
		|						КОНЕЦ
		|				ИНАЧЕ ЦеныНаБазовыйТип.Валюта
		|		КОНЕЦ КАК Валюта,
		|		ВЫБОР	КОГДА ЦеныНаБазовыйТип.Рассчитывается
		|				ТОГДА
		|					ВЫБОР	КОГДА ЦеныНаБазовыйТип.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
		|							ТОГДА ЦеныНаБазовыйТип.ЕдиницаИзмерения
		|							ИНАЧЕ ЦенаПоДиапазону.ЕдиницаИзмерения
		|					КОНЕЦ
		|				ИНАЧЕ ЦеныНаБазовыйТип.ЕдиницаИзмерения
		|		КОНЕЦ КАК ЕдиницаИзмерения,
		|		ЛОЖЬ КАК ФлагУсловийПоставки,
		|		ЦеныНаБазовыйТип.Рассчитывается,
		|		ЦеныНаБазовыйТип.ТипЦенБазовыйДинамический КАК ТипЦен
		| ИЗ
		|(
		|	ВЫБРАТЬ
		|		НоменклатураХарактеристикаТипЦены.Номенклатура,
		|		НоменклатураХарактеристикаТипЦены.ХарактеристикаНоменклатуры,
		|		ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается
		|				ТОГДА 	ВЫБОР 	КОГДА ЕСТЬNULL(КурсВалют.Кратность, 0.00) = 0 ИЛИ ЕСТЬNULL(КурсВалютДинамическийТип.Курс, 0.00) = 0
		|								ТОГДА 0.00
		|								ИНАЧЕ ЕСТЬNULL(ЕСТЬNULL(ЦеныНоменклатуры.Цена, ЦеныНоменклатурыПустаяХарактеристика.Цена), 0.00)
		|									  * ЕСТЬNULL(КурсВалют.Курс, 0.00)
		|									  * ЕСТЬNULL(КурсВалютДинамическийТип.Кратность, 0.00)
		|									  / КурсВалют.Кратность
		|									  / КурсВалютДинамическийТип.Курс
		|						КОНЕЦ
		|				ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатуры.Цена, ЦеныНоменклатурыПустаяХарактеристика.Цена)
		|		КОНЕЦ КАК Цена,
		|		ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается
		|				ТОГДА 	ВЫБОР 	КОГДА ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.СпособРасчетаЦены, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.СпособРасчетаЦены) ЕСТЬ NULL
		|				                ТОГДА ТипЦенНоменклаутры.СпособРасчетаЦены
		|				                ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.СпособРасчетаЦены, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.СпособРасчетаЦены)
		|				        КОНЕЦ
		|				ИНАЧЕ NULL
		|		КОНЕЦ КАК СпособРасчета,
		|		ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается
		|				ТОГДА 	ВЫБОР 	КОГДА ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.ПроцентСкидкиНаценки, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.ПроцентСкидкиНаценки) ЕСТЬ NULL
		|				                ТОГДА ТипЦенНоменклаутры.ПроцентСкидкиНаценки
		|				                ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.ПроцентСкидкиНаценки, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.ПроцентСкидкиНаценки)
		|				        КОНЕЦ
		|				ИНАЧЕ NULL
		|		КОНЕЦ КАК ПроцентСкидкиНаценки,
		|		ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается
		|				ТОГДА ЕСТЬNULL(ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.Валюта, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.Валюта), ТипЦенНоменклаутры.ВалютаЦены)
		|				ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатуры.Валюта, ЦеныНоменклатурыПустаяХарактеристика.Валюта)
		|		КОНЕЦ КАК Валюта,
		|		КурсВалютДинамическийТип.Валюта КАК ВалютаДинамическийТип,
		|		ЕСТЬNULL(ЕСТЬNULL(ЦеныНоменклатуры.ЕдиницаИзмерения, ЦеныНоменклатурыПустаяХарактеристика.ЕдиницаИзмерения), НоменклатураХарактеристикаТипЦены.ЕдиницаХраненияОстатков) КАК ЕдиницаИзмерения,
		|		НоменклатураХарактеристикаТипЦены.ТипЦен,
		|		НоменклатураХарактеристикаТипЦены.ТипЦенБазовыйДинамический,
		|		НоменклатураХарактеристикаТипЦены.Рассчитывается
		|	ИЗ
		|	(
		|		ВЫБРАТЬ
		|			НоменклатураХарактеристикаТипЦены.Номенклатура,
		|			НоменклатураХарактеристикаТипЦены.ХарактеристикаНоменклатуры,
		|			НоменклатураХарактеристикаТипЦены.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков,
		|			ВЫБОР 	КОГДА СпрТипЦены.Рассчитывается
		|					ТОГДА СпрТипЦены.БазовыйТипЦен
		|					ИНАЧЕ СпрТипЦены.Ссылка
		|			КОНЕЦ КАК ТипЦен,
		|			СпрТипЦены.Ссылка КАК ТипЦенБазовыйДинамический,
		|			СпрТипЦены.Рассчитывается
		|		ИЗ
		|		(
		|			ВЫБРАТЬ НоменклатураХарактеристика.Номенклатура,
		|					НоменклатураХарактеристика.ХарактеристикаНоменклатуры,
		|					СпрНомеклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков,
		|					сТипыЦенНоменклатуры.Ссылка КАК ТипЦен
		|			ИЗ
		|			(
		|				ВЫБРАТЬ	
		|					Характеристики.Владелец КАК Номенклатура,
		|					Характеристики.Ссылка КАК ХарактеристикаНоменклатуры
		|				ИЗ
		|					Справочник.ХарактеристикиНоменклатуры КАК Характеристики
		|					ГДЕ Характеристики.Владелец = &Номенклатура
		|				ОБЪЕДИНИТЬ
		|				ВЫБРАТЬ 
		|						&Номенклатура КАК Номенклатура,
		|						ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
		|			) КАК НоменклатураХарактеристика
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|				Справочник.Номенклатура КАК СпрНомеклатура
		|			ПО
		|				СпрНомеклатура.Ссылка = НоменклатураХарактеристика.Номенклатура
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|				Справочник.ТипыЦенНоменклатуры КАК сТипыЦенНоменклатуры
		|			ПО ИСТИНА
		|			ГДЕ
		|				сТипыЦенНоменклатуры.Ссылка В (&ТипыЦен)
		|		) КАК НоменклатураХарактеристикаТипЦены
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|			Справочник.ТипыЦенНоменклатуры КАК СпрТипЦены
		|		ПО
		|			СпрТипЦены.Ссылка = НоменклатураХарактеристикаТипЦены.ТипЦен
		|	) КАК НоменклатураХарактеристикаТипЦены
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатуры
		|	ПО
		|		ЦеныНоменклатуры.Номенклатура = НоменклатураХарактеристикаТипЦены.Номенклатура
		|		И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = НоменклатураХарактеристикаТипЦены.ХарактеристикаНоменклатуры
		|		И ЦеныНоменклатуры.ТипЦен = НоменклатураХарактеристикаТипЦены.ТипЦен
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыПустаяХарактеристика
		|	ПО
		|		ЦеныНоменклатурыПустаяХарактеристика.Номенклатура = НоменклатураХарактеристикаТипЦены.Номенклатура
		|		И ЦеныНоменклатурыПустаяХарактеристика.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
		|		И ЦеныНоменклатурыПустаяХарактеристика.ТипЦен = НоменклатураХарактеристикаТипЦены.ТипЦен
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыДинамическийТип
		|	ПО
		|		ЦеныНоменклатурыДинамическийТип.Номенклатура = НоменклатураХарактеристикаТипЦены.Номенклатура
		|		И ЦеныНоменклатурыДинамическийТип.ХарактеристикаНоменклатуры = НоменклатураХарактеристикаТипЦены.ХарактеристикаНоменклатуры
		|		И ЦеныНоменклатурыДинамическийТип.ТипЦен = НоменклатураХарактеристикаТипЦены.ТипЦенБазовыйДинамический
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип
		|	ПО
		|		ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.Номенклатура = НоменклатураХарактеристикаТипЦены.Номенклатура
		|		И ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
		|		И ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.ТипЦен = НоменклатураХарактеристикаТипЦены.ТипЦенБазовыйДинамический
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.КурсыВалют.СрезПоследних() КАК КурсВалют
		|	ПО
		|		КурсВалют.Валюта = ЕСТЬNULL(ЦеныНоменклатуры.Валюта, ЦеныНоменклатурыПустаяХарактеристика.Валюта)
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		Справочник.ТипыЦенНоменклатуры КАК ТипЦенНоменклаутры
		|	ПО 
		|		ТипЦенНоменклаутры.Ссылка = НоменклатураХарактеристикаТипЦены.ТипЦенБазовыйДинамический
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|		РегистрСведений.КурсыВалют.СрезПоследних() КАК КурсВалютДинамическийТип
		|	ПО
		|		КурсВалютДинамическийТип.Валюта = 	ВЫБОР 	КОГДА НоменклатураХарактеристикаТипЦены.Рассчитывается И ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.Валюта, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.Валюта) ЕСТЬ NULL
		|													ТОГДА ТипЦенНоменклаутры.ВалютаЦены
		|													ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатурыДинамическийТип.Валюта, ЦеныНоменклатурыПустаяХарактеристикаДинамическийТип.Валюта)
		|											КОНЕЦ
		|) КАК ЦеныНаБазовыйТип
		|//Динамический тип цен
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|(
		|	ВЫБРАТЬ
		|	        ДинамическийТипЦен.Номенклатура
		|	      , ДинамическийТипЦен.ХарактеристикаНоменклатуры
		|	      , ДинамическийТипЦен.ДинамическийТип КАК БазовыйТипЦен
		|	      , ДинамическийТипЦен.ЕдиницаИзмерения КАК ЕдиницаИзмерения
		|	      , ЕСТЬNULL(ЦенаПоДиапазону.Цена, 0.00) КАК Цена
		|	      , ЦенаПоДиапазону.Валюта
		|	ИЗ
		|	(
		|		ВЫБРАТЬ  ЦенаДляРасчетаДиапазона.Номенклатура,
		|			ЦенаДляРасчетаДиапазона.ХарактеристикаНоменклатуры,		
		|	  		ЦенаДляРасчетаДиапазона.ДинамическийТип,
		|	  		МИНИМУМ(ЦенаПоДиапазону.Валюта) КАК Валюта,
		|	  		МИНИМУМ(ЦенаДляРасчетаДиапазона.ЕдиницаИзмерения) КАК ЕдиницаИзмерения,
		|	  		МИНИМУМ(ЦенаПоДиапазону.ВерхняяГраница) КАК Цена
		|	ИЗ
		|	(
		|		ВЫБРАТЬ
		|			НомеклатураХарактеристикаТип.Номенклатура КАК Номенклатура,
		|			НомеклатураХарактеристикаТип.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
		|			ЕСТЬNULL(ЕСТЬNULL(ЦеныБазовые.Цена, ЦеныБазовыеПустаяХарактеристика.Цена), 0.00) КАК Цена,
		|			ЕСТЬNULL(ЦеныБазовые.ТипЦен, ЦеныБазовыеПустаяХарактеристика.ТипЦен) КАК ДинамическийТип,
		|			ЕСТЬNULL(ЦеныБазовые.ЕдиницаИзмерения, ЦеныБазовыеПустаяХарактеристика.ЕдиницаИзмерения) КАК ЕдиницаИзмерения
		|		ИЗ
		|		(
		|			ВЫБРАТЬ	
		|				Характеристики.Владелец КАК Номенклатура,
		|				Характеристики.Ссылка КАК ХарактеристикаНоменклатуры
		|			ИЗ
		|				Справочник.ХарактеристикиНоменклатуры КАК Характеристики
		|			ГДЕ Характеристики.Владелец = &Номенклатура
		|			ОБЪЕДИНИТЬ
		|			ВЫБРАТЬ 
		|					&Номенклатура КАК Номенклатура,
		|					ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
		|		) КАК НомеклатураХарактеристикаТип
		|		ЛЕВОЕ СОЕДИНЕНИЕ
		|			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура И (НЕ ТипЦен.Рассчитывается И ТипЦен В (&ТипыЦен))) КАК ЦеныБазовые
		|		ПО
		|			ЦеныБазовые.Номенклатура = НомеклатураХарактеристикаТип.Номенклатура
		|			И ЦеныБазовые.ХарактеристикаНоменклатуры = НомеклатураХарактеристикаТип.ХарактеристикаНоменклатуры
		|		ЛЕВОЕ СОЕДИНЕНИЕ
		|			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура И (НЕ ТипЦен.Рассчитывается И ТипЦен В (&ТипыЦен))) КАК ЦеныБазовыеПустаяХарактеристика
		|		ПО
		|			ЦеныБазовыеПустаяХарактеристика.Номенклатура = НомеклатураХарактеристикаТип.Номенклатура
		|			И ЦеныБазовыеПустаяХарактеристика.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
		|		ГДЕ
		|			НЕ ЕСТЬNULL(ЦеныБазовые.ТипЦен, ЦеныБазовыеПустаяХарактеристика.ТипЦен) ЕСТЬ NULL
		|	) КАК ЦенаДляРасчетаДиапазона
		|	ЛЕВОЕ СОЕДИНЕНИЕ
		|	(
		|		ВЫБРАТЬ  Диапазон.Валюта
		|				,ТипыЦен.БазовыйТипЦен КАК ТипЦен
		|				, Диапазон.Цена
		|				, Диапазон.ВерхняяГраница
		|		ИЗ
		|			РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(,) КАК Диапазон 
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|		(	
		|			ВЫБРАТЬ	ТипЦен
		|					, МАКСИМУМ(Период) КАК Период
		|			ИЗ РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(, ) КАК Диапазон 
		|			СГРУППИРОВАТЬ ПО Диапазон.ТипЦен
		|		) КАК Диапазон2
		|		ПО Диапазон2.ТипЦен = Диапазон.ТипЦен И Диапазон2.Период = Диапазон.Период
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|			Справочник.ТипыЦенНоменклатуры КАК ТипыЦен
		|		ПО
		|			ТипыЦен.Ссылка = Диапазон.ТипЦен
		|	) КАК ЦенаПоДиапазону
		|	ПО
		|		ЦенаПоДиапазону.ТипЦен = ЦенаДляРасчетаДиапазона.ДинамическийТип
		|		И ЦенаПоДиапазону.ВерхняяГраница > ЦенаДляРасчетаДиапазона.Цена
		|	ГДЕ
		|		НЕ ЦенаПоДиапазону.ВерхняяГраница ЕСТЬ NULL	
		|	СГРУППИРОВАТЬ ПО ЦенаДляРасчетаДиапазона.ДинамическийТип
		|					, ЦенаДляРасчетаДиапазона.ХарактеристикаНоменклатуры
		|					, ЦенаДляРасчетаДиапазона.Номенклатура	
							
		|	) КАК ДинамическийТипЦен
		|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|	(	
		|		ВЫБРАТЬ  Диапазон.Валюта
		|				, ТипыЦен.БазовыйТипЦен КАК ТипЦен
		|				, Диапазон.Цена
		|				, Диапазон.ВерхняяГраница
		|		ИЗ
		|			РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(,) КАК Диапазон 
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|			Справочник.ТипыЦенНоменклатуры КАК ТипыЦен
		|		ПО
		|			ТипыЦен.Ссылка = Диапазон.ТипЦен
		|	) КАК ЦенаПоДиапазону
		|	ПО
		|		ЦенаПоДиапазону.ТипЦен = ДинамическийТипЦен.ДинамическийТип
		|		И ЦенаПоДиапазону.ВерхняяГраница = ДинамическийТипЦен.Цена
		|) КАК ЦенаПоДиапазону
		|ПО
		|	ЦенаПоДиапазону.БазовыйТипЦен = ЦеныНаБазовыйТип.ТипЦен
		|	И ЦенаПоДиапазону.Номенклатура = ЦеныНаБазовыйТип.Номенклатура
		|	И ЦенаПоДиапазону.ХарактеристикаНоменклатуры = ЦеныНаБазовыйТип.ХарактеристикаНоменклатуры
		|ГДЕ
		|	ВЫБОР	КОГДА ЦеныНаБазовыйТип.Рассчитывается
		|			ТОГДА
		|				ВЫБОР 	КОГДА ЦеныНаБазовыйТип.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
		|						ТОГДА ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00) + ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00) * (ЦеныНаБазовыйТип.ПроцентСкидкиНаценки /100)
		|						ИНАЧЕ ЕСТЬNULL(ЦенаПоДиапазону.Цена, 0.00)
		|				КОНЕЦ
		|			ИНАЧЕ ЕСТЬNULL(ЦеныНаБазовыйТип.Цена, 0.00)
		|	КОНЕЦ > 0
		|) КАК Цены
		|ПО
		|	Цены.Номенклатура = ХарактеристикиНоменклатуры.Владелец
		|	И Цены.ХарактеристикаНоменклатуры = ХарактеристикиНоменклатуры.Ссылка
		|";*/
			}
			/*ТекстЗапроса = ТекстЗапроса + "
		|		ОБЪЕДИНИТЬ ВСЕ
				
		|		ВЫБРАТЬ
		|			ЗаказаныйТовар.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
		|			 " + ?(ОтображатьСклады,", ""НеВыводить"" КАК Склад, ""НеВыводить"" КАК МестоХранения ","") + "
		|			, 0 КАК КоличествоОстаток
		|			, 0 КАК КоличествоСвободныйОстаток
		|			, 0 КАК КоличествоВРезерве
		|			, ЗаказаныйТовар.КоличествоОстаток КАК КоличествоСвободныйОстатокВЗаказахПоставщикам";*/
			if(true/*ПолучатьЦены*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
			|	,
			|	0  КАК ФлагЦены,
			|	0 КАК Цена,
			|	0 КАК Валюта,
			|	0 КАК ЕдиницаЦены,
			|	0 КАК КурсВалюты,
			|	0 КАК КратностьВалюты,
			|	NULL КАК ТИПЦЕН";*/
			}
			/*ТекстЗапроса = ТекстЗапроса + "
		|		ИЗ
		|			(ВЫБРАТЬ
		|				ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
		|				, СУММА(ЕСТЬNULL(ЗаказыПоставщикамОстатки.КоличествоОстаток, 0.00)
		|						-
		|						ЕСТЬNULL(РазмещениеЗаказовПокупателейОстатки.КоличествоОстаток,0.00)
		|				) 	КАК КоличествоОстаток
		|			ИЗ
		|				РегистрНакопления.ЗаказыПоставщикам.Остатки(, Номенклатура = &Номенклатура) КАК ЗаказыПоставщикамОстатки
		|			ЛЕВОЕ СОЕДИНЕНИЕ
		|				РегистрНакопления.РазмещениеЗаказовПокупателей.Остатки(, Номенклатура = &Номенклатура) КАК РазмещениеЗаказовПокупателейОстатки
		|			ПО
		|				РазмещениеЗаказовПокупателейОстатки.ЗаказПоставщику = ЗаказыПоставщикамОстатки.ЗаказПоставщику
		|				СГРУППИРОВАТЬ ПО ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры
		|			) КАК ЗаказаныйТовар
		|		ГДЕ ЕСТЬNULL(ЗаказаныйТовар.КоличествоОстаток , 0.00) > 0
		|";*/
			if(true/*ОтображатьСклады*/)
			{
				/*ТекстЗапроса = ТекстЗапроса + "
		|	УПОРЯДОЧИТЬ ПО
		|		ХарактеристикаНоменклатуры,
		|		Склад
		|		//,АдресныйСклад.Приоритет
		|	ИТОГИ 	СУММА(КоличествоСвободныйОстатокВЗаказахПоставщикам) ПО
		|	ХарактеристикаНоменклатуры,
		|	Склад,
		|	МестоХранения
		|";*/
			}
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			/*// ничего не выбрали - нечего и обрабатывать
*/
			if(true/*РезультатЗапроса.Пустой()*/)
			{
				//СтрокаХарактеристика = ДеревоОстатков.Строки.Добавить();
			}
			if(true/*ОтображатьСклады*/)
			{
				/*// отображение результатов с итогами по Характеристикам и Складам
*/
				//ВыборкаХарактеристика = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ХарактеристикаНоменклатуры");
				while(true/*ВыборкаХарактеристика.Следующий()*/)
				{
					//СтрокаХарактеристика = ДеревоОстатков.Строки.Добавить();
					//ЗаполнитьХарактеристикуТовара(СтрокаХарактеристика, ВыборкаХарактеристика);
					//ВыборкаСклад = ВыборкаХарактеристика.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
					while(true/*ВыборкаСклад.Следующий()*/)
					{
						if(true/*ВыборкаСклад.Склад = "НеВыводить"*/)
						{
						}
						if(true/*ЗначениеЗаполнено(ВыборкаСклад.Склад)*/)
						{
							//СтрокаСклад = СтрокаХарактеристика.Строки.Добавить();
							//СтрокаСклад.ХарактеристикаСклад = ВыборкаСклад.Склад;
						}
						//ПервыйПроходМестХранения = Истина;
						//ВыборкаМестаХранения = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "МестоХранения");
						while(true/*ВыборкаМестаХранения.Следующий()*/)
						{
							if(true/*ПервыйПроходМестХранения*/)
							{
								//ВыборкаДетальных = ВыборкаМестаХранения.Выбрать();
								if(true/*ВыборкаДетальных.Следующий()*/)
								{
									/*// остатки везде одинаковые
*/
									if(true/*ЗначениеЗаполнено(ВыборкаСклад.Склад)*/)
									{
										//ЗаполнитьПоляОстатков(СтрокаСклад, ВыборкаДетальных);
										/*// для итогов еще более верхнего уровня дополняем суммы
*/
										//ДополнитьПоляОстатков(СтрокаХарактеристика, ВыборкаДетальных);
									}
									/*// в разрезе цен заполняем
*/
									if(true/*ПолучатьЦены*/)
									{
										//ЗаполнитьПоляСумм(СтрокаХарактеристика, ВыборкаДетальных, СписокЦенОстатков, КурсыВалют);
										while(true/*ВыборкаДетальных.Следующий()*/)
										{
											if(true/*ПолучатьЦены*/)
											{
												//ЗаполнитьПоляСумм(СтрокаХарактеристика, ВыборкаДетальных, СписокЦенОстатков, КурсыВалют);
											}
										}
										//;;
									}
								}
							}
							if(true/*ЗначениеЗаполнено(ВыборкаМестаХранения.МестоХранения)*/)
							{
								//СтрокаСклад.МестоХранения = ?(ПустаяСтрока(СтрокаСклад.МестоХранения), "", СтрокаСклад.МестоХранения + "; ") + ВыборкаМестаХранения.МестоХранения;
							}
							//ПервыйПроходМестХранения = Ложь;
						}
						//;;
					}
					//;;
				}
				//;;
			}
		}
		// ПолучитьНовДеревоОстатковНоменклатуры()
		// Функция возвращает массив префиксов тех колонок сумм которые будут выведены

		public object ПолучитьСписокПрефиксовВыводимыхСумм(/*СписокЦенОстатков*/)
		{
			/*Экспорт 
	
	СписокПрефиксовЦен = Новый СписокЗначений;*/
			if(true/*СписокЦенОстатков = Неопределено*/)
			{
			}
			return null;
		}
		// Процедура пересчитывает суммы номенклатуры из одной валюты в другую

		public void ПересчитатьОстаткиВВалюте(/*ДеревоОстатков, СписокПрефиксовЦен, СтруктураКурса, ВВалютеЦены, ВалютаЦены*/)
		{
			/*// определяем курс и кратность валюты
*/
			if(true/*НЕ ВВалютеЦены И ЗначениеЗаполнено(ВалютаЦены)*/)
			{
				//КурсВалюты      = СтруктураКурса.Курс;
				//КратностьВалюты = СтруктураКурса.Кратность;
			}
		}
		// Процедура из структуры заполняет параметры

		public void ПолучитьПараметрыДокументаИзСтруктуры(/*СтруктурЗначений, ТипЦен,
												СпособЗаполненияЦен, Номенклатура, Количество, КоличествоМест, Характеристика,
												ВалютаЦены, Цена, ЕдиницаИзмерения*/)
		{
			/*// Получим параметры подбора из структуры подбора.
*/
			//СтруктурЗначений.Свойство("СпособЗаполненияЦен", СпособЗаполненияЦен);
			//СтруктурЗначений.Свойство("Номенклатура"    , Номенклатура);
			//СтруктурЗначений.Свойство("Количество"      , Количество);
			//СтруктурЗначений.Свойство("КоличествоМест"  , КоличествоМест);
			//СтруктурЗначений.Свойство("Характеристика"  , Характеристика);
			if(true/*Характеристика = Неопределено*/)
			{
				//Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
			}
			//СтруктурЗначений.Свойство("СписокПрефиксовЦен"  , СписокПрефиксовЦен);
			if(true/*СписокПрефиксовЦен <> Неопределено*/)
			{
				/*// может быть передано несколько типов цен
*/
				if(true/*ЗначениеЗаполнено(ТипЦен)*/)
				{
					//ПрефиксЦены = СформироватьПрефиксДляЭлемента(ТипЦен);
					//СтруктурЗначений.Свойство(ПрефиксЦены + "ВалютаЦены"      , ВалютаЦены);
					//СтруктурЗначений.Свойство(ПрефиксЦены + "Цена"            , Цена);
					//СтруктурЗначений.Свойство(ПрефиксЦены + "ЕдиницаИзмерения", ЕдиницаИзмерения);
				}
			}
			if(true/*НЕ ЗначениеЗаполнено(ЕдиницаИзмерения)*/)
			{
				//ЕдиницаИзмерения = Номенклатура.ЕдиницаХраненияОстатков;
			}
		}
		// Процедура восстанавливает флажки у выделенных элементов списка типов цен

		public void ВосстановитьФлажкиТиповЦен(/*СписокТиповЦен, СохраненныйСписок*/)
		{
			if(true/*СписокТиповЦен = Неопределено Или СохраненныйСписок = Неопределено*/)
			{
			}
		}
		// Процедура обновляет список типов цен, оставляет выделенными те элементы, что и были выделены до этого

		public void ОбновитьСписокТиповЦен(/*СписокТиповЦен, СписокВыделенныхЭлементов*/)
		{
			/*// восстанавливаем выделенные элементы у СписокЦенОстатков
*/
			//СписокТиповЦен = ЗаполнитьСписокТиповЦенДляПолученияОстатков();
			if(true/*СписокВыделенныхЭлементов <> Неопределено*/)
			{
				//ВосстановитьФлажкиТиповЦен(СписокТиповЦен, СписокВыделенныхЭлементов);
			}
		}
		// Процедура устанавливает порядок следования списка типов цен

		public void УпорядочитьСписокТиповЦен(/*СписокТиповЦен, ПорядокСледованияЦен*/)
		{
			if(true/*(СписокТиповЦен = Неопределено) Или (ПорядокСледованияЦен = Неопределено)*/)
			{
			}
			//НомерОчередногоТипаЦен = 0;
		}
		// Процедура обновляет и упорядочивает список типов цен

		public void ОбновитьИУпорядочитьСписокТиповЦен(/*СписокТиповЦен*/)
		{
			//СписокВыделенныхЭлементов = ПолучитьСписокПрефиксовВыводимыхСумм(СписокТиповЦен);
			//ПорядокСледованияТиповЦен = Новый Массив;
			//ПорядокСледованияТиповЦен = СписокТиповЦен.ВыгрузитьКолонку("Ссылка");
			//ОбновитьСписокТиповЦен(СписокТиповЦен, СписокВыделенныхЭлементов);
			//УпорядочитьСписокТиповЦен(СписокТиповЦен, ПорядокСледованияТиповЦен);
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБСЛУЖИВАНИЯ КОМПЛЕКТУЮЩИХ
		// Формирует копию таблицы значений, с заменой "комплекта" на "комплектующие".
		//
		// Параметры:
		//  ТаблицаИсточник         - таблица значений источник, содержащая комплекты,
		//  ДокументОбъект          – объект редактируемого документа,
		//  СтруктураШапкиДокумента - структура шапки документа.
		//
		// Возвращаемое значение:
		//  Таблица значений.
		//

		public object СформироватьТаблицуКомплектующих(/*ТаблицаИсточник, ДокументОбъект, СтруктураШапкиДокумента = Неопределено*/)
		{
			//ТаблицаРезультат   = ТаблицаИсточник.Скопировать();
			//ТаблицаРезультат.Колонки.Добавить("НоменклатураКомплекта");
			//ТаблицаРезультат.Колонки.Добавить("ХарактеристикаКомплекта");
			//ТаблицаРезультат.Колонки.Добавить("КоличествоКомплекта");
			//ТаблицаРезультат.Колонки.Добавить("СчетУчетаБУКомплекта");
			//ТаблицаРезультат.Колонки.Добавить("СчетУчетаНУКомплекта");
			//ЕстьЦенаВРознице = ТаблицаРезультат.Колонки.Найти("ЦенаВРознице") <> Неопределено;
			if(true/*ЕстьЦенаВРознице*/)
			{
				//ТаблицаРезультат.Колонки.ЦенаВРознице.Имя = "Цена";
			}
			//НайденныеКомплекты = ТаблицаРезультат.НайтиСтроки(Новый Структура("Комплект", Истина));
			/*//НайденныеСпецПредложения = ТаблицаРезультат.НайтиСтроки(Новый Структура("ТипНоменклатуры", Перечисления.ТипыНоменклатуры.СпецПредложение));
*/
			/*//Для Каждого СпецПредложение Из НайденныеСпецПредложения Цикл
*/
			/*//	НайденныеКомплекты.Добавить(СпецПредложение);
*/
			/*//КонецЦикла;
*/
			if(true/*НайденныеКомплекты.Количество() > 0*/)
			{
				/*// Проверим, указаны ли в таблице, содержащей комплекты счета учета
*/
				//ЕстьСчетУчетаБУКомплекта = (ТаблицаИсточник.Колонки.Найти("СчетУчетаБУ") <> Неопределено);
				//ЕстьСчетУчетаНУКомплекта = (ТаблицаИсточник.Колонки.Найти("СчетУчетаНУ") <> Неопределено);
				//МетаданныеДокумента = ДокументОбъект.Метаданные();
				//ИмяДокумента        = МетаданныеДокумента.Имя;
				//ЕстьСерия           = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СерияНоменклатуры",            МетаданныеДокумента, "СоставНабора");
				//ЕстьСклад           = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Склад",                        МетаданныеДокумента, "СоставНабора");
				//ЕстьКачество        = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Качество",                     МетаданныеДокумента, "СоставНабора");
				//ЕстьСпособСписания  = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СпособСписанияОстаткаТоваров", МетаданныеДокумента, "СоставНабора");
				//ЕстьСебестоимость   = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Себестоимость",                МетаданныеДокумента, "СоставНабора");
				//ЕстьСчетУчетаБУ     = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СчетУчетаБУ",                  МетаданныеДокумента, "СоставНабора");
				//ЕстьСчетУчетаНУ     = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СчетУчетаНУ",                  МетаданныеДокумента, "СоставНабора");
				//ЕстьПринятыеСчетУчетаБУ = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПринятыеСчетУчетаБУ", 		МетаданныеДокумента, "СоставНабора");
				//ЕстьПринятыеСчетУчетаНУ = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПринятыеСчетУчетаНУ",      МетаданныеДокумента, "СоставНабора");
				//СписокКомплектов = Новый СписокЗначений;
				//Запрос = Новый Запрос;
				//Запрос.УстановитьПараметр("ПарДокументСсылка",   ДокументОбъект.Ссылка);
				//Запрос.УстановитьПараметр("ПарСписокКомплектов", СписокКомплектов);
				/*Запрос.Текст = 
		"ВЫБРАТЬ
		|	Док.КлючСтроки                                           КАК КлючСтроки,
		|	Док.Номенклатура                                         КАК Номенклатура,
		|	Док.Номенклатура.ВестиПартионныйУчетПоСериям             КАК ВестиПартионныйУчетПоСериям,
		|	Док.ХарактеристикаНоменклатуры                           КАК ХарактеристикаНоменклатуры,
		|" + ?(ЕстьСчетУчетаБУ,    "Док.СчетУчетаБУ                  КАК СчетУчетаБУ,",            		 "") + "
		|" + ?(ЕстьСчетУчетаНУ,    "Док.СчетУчетаНУ                  КАК СчетУчетаНУ,",            		 "") + "
		|" + ?(ЕстьПринятыеСчетУчетаБУ, "Док.ПринятыеСчетУчетаБУ     КАК ПринятыеСчетУчетаБУ,",          "") + "
		|" + ?(ЕстьПринятыеСчетУчетаНУ, "Док.ПринятыеСчетУчетаНУ     КАК ПринятыеСчетУчетаНУ,",          "") + "
		|" + ?(ЕстьСерия,          "Док.СерияНоменклатуры            КАК СерияНоменклатуры,",            "") + "
		|" + ?(ЕстьСклад,          "Док.Склад                        КАК Склад,
		|						    Док.Склад.ВидСклада              КАК ВидСклада,",                    "") + "
		|" + ?(ЕстьКачество,       "Док.Качество                     КАК Качество,",                     "") + "
		|" + ?(ЕстьСпособСписания, "Док.СпособСписанияОстаткаТоваров КАК СпособСписанияОстаткаТоваров,", "") + "
		|" + ?(ЕстьСебестоимость,  "Док.Себестоимость                КАК Себестоимость,",                "") + "
		|	Док.Количество                                           КАК Количество,
		|	Док.Количество * 
		|		Док.ЕдиницаИзмерения.Коэффициент /
		|		Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоличествоХранения,
		|	Док.ЕдиницаИзмерения                                     КАК ЕдиницаИзмерения,
		|	Док.Цена                                     			 КАК Цена
		|
		|ИЗ
		|	Документ." + ИмяДокумента + ".СоставНабора КАК Док
		|
		|ГДЕ
		|	Док.Ссылка = &ПарДокументСсылка
		|	И Док.КлючСтроки В (&ПарСписокКомплектов)
		|
		|УПОРЯДОЧИТЬ ПО
		|	Док.КлючСтроки
		|
		|";*/
				//РезультатЗапроса     = Запрос.Выполнить();
				//ТаблицаКомплектующих = РезультатЗапроса.Выгрузить();
				//КолекцияРаспределяемыхПоказателей = Новый Структура("Цена", 0);
			}
			if(true/*ЕстьЦенаВРознице*/)
			{
				//ТаблицаРезультат.Колонки.Цена.Имя = "ЦенаВРознице";
			}
			return null;
		}
		// СформироватьТаблицуКомплектующих()
		// Функция формирует значение нового ключа строки табличной части.
		//
		// Параметры:
		//  ДокументОбъект – объект редактируемого документа,
		//  ИмяТЧ          – имя табличной части объекта.
		//

		public object ПолучитьНовыйКлючСтроки(/*ДокументОбъект, ИмяТЧ = "Товары"*/)
		{
			if(true/*ДокументОбъект[ИмяТЧ].Количество() = 0*/)
			{
				//МаксКлюч = 1;
			}
			return null;
		}
		// УчетСерийныхНомеров.ПолучитьНовыйКлючСвязи()
		// Функция получает таблицу значений с "комплектующими".
		//
		// Параметры:
		//  СтрокаТабличнойЧасти - строка табличной части документа
		//
		// Возвращаемое значение:
		//  Таблица значений.
		//

		public object ПолучитьТаблицуКомплектующих(/*СтрокаТабличнойЧасти, ДатаДокумента = Неопределено*/)
		{
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("ПарНоменклатура",   СтрокаТабличнойЧасти.Номенклатура);
			//Запрос.УстановитьПараметр("ПарХарактеристика", СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры);
			//Запрос.УстановитьПараметр("ПарКлючСтроки",     СтрокаТабличнойЧасти.КлючСтроки);
			if(true/*ДатаДокумента <> Неопределено*/)
			{
				//Запрос.УстановитьПараметр("Дата", ДатаДокумента);
				/*Запрос.Текст = "
		|ВЫБРАТЬ
		|	СпецПредложения.Комплектующая КАК Номенклатура,
		|	СпецПредложения.ХарактеристикаКомплектующей КАК ХарактеристикаНоменклатуры,
		|	СпецПредложения.Количество КАК Количество,
		|	СпецПредложения.Комплектующая.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
		|	&ПарКлючСтроки КАК КлючСтроки,
		|	0 КАК Цена
		|ИЗ
		|	(ВЫБРАТЬ
		|		СкидкиНатуральные.СпецПредложение КАК СпецПредложение,
		|		СкидкиНатуральные.ХарактеристикаСпецПредложения КАК ХарактеристикаСпецПредложения,
		|		МАКСИМУМ(СкидкиНатуральные.Регистратор) КАК Регистратор
		|	ИЗ
		|		РегистрСведений.СкидкиНоменклатурыНатуральные.СрезПоследних(&Дата) КАК СкидкиНатуральные
		|	ГДЕ
		|		СкидкиНатуральные.СпецПредложение = &ПарНоменклатура
		|	  И СкидкиНатуральные.ХарактеристикаСпецПредложения = &ПарХарактеристика
		|	СГРУППИРОВАТЬ ПО
		|		СпецПредложение,
		|		ХарактеристикаСпецПредложения
		|	) КАК СкидкиНатуральные
		|СОЕДИНЕНИЕ
		|	РегистрСведений.СпецПредложения КАК СпецПредложения
		|	ПО СкидкиНатуральные.Регистратор = СпецПредложения.Регистратор
		|	И СкидкиНатуральные.СпецПредложение = СпецПредложения.Номенклатура
		|	И СкидкиНатуральные.ХарактеристикаСпецПредложения = СпецПредложения.ХарактеристикаНоменклатуры
		|";*/
			}
			//РезультатЗапроса     = Запрос.Выполнить();
			//ТаблицаКомплектующих = РезультатЗапроса.Выгрузить();
			/*//Если ДокументОбъект <> Неопределено Тогда
*/
			/*//	ВалютаДокумента = ОбщегоНазначения.ПолучитьРеквизитШапки("ВалютаДокумента", ДокументОбъект, МетаданныеДокумента, ДокументОбъект.мВалютаРегламентированногоУчета);
*/
			/*//	ДоговорКонтрагента = ОбщегоНазначения.ПолучитьРеквизитШапки("ДоговорКонтрагента", ДокументОбъект, МетаданныеДокумента);
*/
			/*//	УсловиеПродаж = ОбщегоНазначения.ПолучитьРеквизитШапки("УсловиеПродаж", ДокументОбъект, МетаданныеДокумента);
*/
			/*//	Для Каждого СтрокаТЗ Из ТаблицаКомплектующих Цикл
*/
			/*//		ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект, ДокументОбъект.мВалютаРегламентированногоУчета);
*/
			/*//		СтрокаТЗ.Цена = Ценообразование.ПолучитьЦенуНоменклатуры(СтрокаТабличнойЧасти.Номенклатура,
*/
			/*//		   СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры, ДокументОбъект.ТипЦен,
*/
			/*//		   ВалютаДокумента, , , , ДоговорКонтрагента, УсловиеПродаж);
*/
			/*//	КонецЦикла;
*/
			/*//КонецЕсли;
*/
			return null;
		}
		// ПолучитьТаблицуКомплектующих()
		// Очистить состав набора в документе
		//
		// Параметры:
		//  СтрокаТабличнойЧасти - строка табличной части документа,
		//  ДокументОбъект       - объект редактируемого документа.
		//

		public void ОчиститьСоставНабора(/*СтрокаТабличнойЧасти, ДокументОбъект*/)
		{
			//ТабличнаяЧасть = ДокументОбъект.СоставНабора;
			if(true/*ТабличнаяЧасть.Количество() = 0*/)
			{
			}
			//СтруктураПоиска = Новый Структура;
			//СтруктураПоиска.Вставить("КлючСтроки", СтрокаТабличнойЧасти.КлючСтроки);
			//МассивЭлементов = ТабличнаяЧасть.НайтиСтроки(СтруктураПоиска);
			//КолвоЭлементов  = МассивЭлементов.Количество();
			//СерНомераНабора = ДокументОбъект.Метаданные().ТабличныеЧасти.Найти("СерийныеНомераСоставНабора");
			if(true/*СерНомераНабора <> Неопределено*/)
			{
			}
		}
		// ОчиститьСоставНабора()
		// Добавить состав набора в документ
		//
		// Параметры:
		//  СтрокаТабличнойЧасти - строка табличной части документа,
		//  ДокументОбъект       - объект редактируемого документа.
		//

		public void ДобавитьСоставНабора(/*СтрокаТабличнойЧасти, ДокументОбъект*/)
		{
			/*// Очистим состав набора.
*/
			//ОчиститьСоставНабора(СтрокаТабличнойЧасти, ДокументОбъект);
			if(true/*Не СтрокаТабличнойЧасти.Номенклатура.Комплект*/)
			{
			}
			//МетаданныеДокументы = Метаданные.Документы;
			//ДокументыПродажи = Новый Соответствие;
			//ДокументыПродажи.Вставить(МетаданныеДокументы["ЗаказПокупателя"]           , 0);
			//ДокументыПродажи.Вставить(МетаданныеДокументы["ВозвратТоваровОтПокупателя"], 0);
			//ДокументыПродажи.Вставить(МетаданныеДокументы["РеализацияТоваровУслуг"]    , 0);
			//ДокументыПродажи.Вставить(МетаданныеДокументы["СчетНаОплатуПокупателю"]    , 0);
			//ДокументыПродажи.Вставить(МетаданныеДокументы["ЧекККМ"]                    , 1);
			//ТекДокументПродажи = ДокументыПродажи[ДокументОбъект.Метаданные()];
			if(true/*ТекДокументПродажи = Неопределено*/)
			{
				//ТекСпецПредложение = Ложь;
			}
			if(true/*ТекСпецПредложение*/)
			{
				//ТаблицаКомплектующих = ПолучитьТаблицуКомплектующих(СтрокаТабличнойЧасти, ДокументОбъект.Дата);
			}
			//ТабличнаяЧасть = ДокументОбъект.СоставНабора;
			//СтуктураПоиска = Новый Структура;
			/*// Цикл по строкам таблицы значений.
*/
		}
		// ДобавитьСоставНабора()
		// Заполнить состав набора на основании
		//
		// Параметры:
		//  ДокументОбъект    - объект редактируемого документа,
		//  ДокументОснование - объект документа основания,
		//

		public void ЗаполнитьСоставНабораПоОснованию(/*ДокументОбъект, ДокументОснование, ПоискПоКлючу = Ложь*/)
		{
			if(true/*ДокументОбъект.Товары.Количество() = 0*/)
			{
			}
			//МетаданныеДокумента   = ДокументОбъект.Метаданные();
			//МетаданныеОснования   = ДокументОснование.Метаданные();
			//ОснованиеЕстьСерия    = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СерияНоменклатуры", МетаданныеОснования, "Товары");
			//ДокументЕстьСерия     = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СерияНоменклатуры", МетаданныеДокумента, "Товары");
			//ДокументСоставНабора  = ДокументОбъект.СоставНабора;
			//ОснованиеСоставНабора = ДокументОснование.СоставНабора;
			//ОснованиеТовар        = ДокументОснование.Товары;
			//КолонкиСоставаНабора  = ДокументСоставНабора.Выгрузить().Колонки;
			/*// Цикл по строкам таблицы значений.
*/
		}
		// ЗаполнитьСоставНабораПоОснованию()
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ ВЕДЕНИЯ УПРАВЛЕНЧЕСКОГО ПАРТИОННОГО УЧЕТА ПО ОРГАНИЗАЦИЯМ

		public object ПолучитьОрганизациюВСоответствииСоСпособомВеденияПартионногоУчетаПоОрганизациям(/*Организация, СпособВеденияПартионногоУчетаПоОрганизации*/)
		{
			if(true/*СпособВеденияПартионногоУчетаПоОрганизации = Перечисления.СпособыВеденияПартионногоУчетаПоОрганизациям.ПоТекущейОрганизации*/)
			{
			}
			return null;
		}

		public object ПолучитьСпособВеденияПартионногоУчетаПоОрганизации(/*Организация, Дата*/)
		{
			/*Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	НастройкаСпособовВеденияУправленческогоПартионногоУчетаСрезПоследних.СпособВеденияПартионногоУчетаПоОрганизации
	                      |ИЗ
	                      |	РегистрСведений.НастройкаСпособовВеденияУправленческогоПартионногоУчета.СрезПоследних(&Дата, Организация = &Организация) КАК НастройкаСпособовВеденияУправленческогоПартионногоУчетаСрезПоследних
	                      |");*/
			//Запрос.УстановитьПараметр("Дата",Дата);
			//Запрос.УстановитьПараметр("Организация",Организация);
			//Результат = Запрос.Выполнить();
			if(true/*Результат.Пустой()*/)
			{
			}
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// РЕГИСТРАЦИЯ В ПОСЛЕДОВАТЕЛЬНОСТЯХ

		public void ЗарегистрироватьДокументВПоследовательностяхПартионногоУчета(/*ДокументОбъект, Дата, Организация = Неопределено, Упр=Ложь, Бух = Ложь, Нал = Ложь, СпособВеденияПартионногоУчетаПоОрганизации=Неопределено*/)
		{
			if(true/*ДокументОбъект.ДополнительныеСвойства.Свойство("ТаблицаСтаройРегистрацииВПоследовательности")*/)
			{
				//ТаблицаСтаройРегистрацииВПоследовательности = ДокументОбъект.ДополнительныеСвойства.ТаблицаСтаройРегистрацииВПоследовательности;
			}
			//УправлениеЗапасамиПартионныйУчет.ЗарегистрироватьДокументВПоследовательностяхПартионногоУчетаНаСервере(ДокументОбъект.Ссылка, Дата, Организация, Упр, Бух, Нал, СпособВеденияПартионногоУчетаПоОрганизации, ТаблицаСтаройРегистрацииВПоследовательности);
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ПОЛУЧЕНИЯ ИНФОРМАЦИИ О СЕБЕСТОИМОСТИ ДЛЯ ПЕЧАТНЫХ ФОРМ И ОБРАБОТОК ЗАПОЛНЕНИЯ
		// Функция возвращает способ расчета себестоимости в формах
		//
		// Параметры:
		//  Дата - дата, на которую получается способ расчета ,
		//  Организация - ссылка на организацию, по которой получается способ расчета
		//
		// Возвращаемое значение:
		//  Перечисление СпособыРасчетаСебестоимостиВФормах - содержит требуемый способ расчета
		//

		public object ПолучитьСпособРасчетаСебестоимостиВФормах(/*Дата, Организация*/)
		{
			/*Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
	                      |	Организации.Ссылка,
	                      |	ВЫБОР
	                      |		КОГДА УстановкаПараметровУчетаНоменклатурыСпособыРасчетаСебестоимостиВФормах.СпособРасчета ЕСТЬ NULL 
	                      |			ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаСебестоимостиВФормах.ПоДаннымБухгалтерскогоУчета)
	                      |		ИНАЧЕ УстановкаПараметровУчетаНоменклатурыСпособыРасчетаСебестоимостиВФормах.СпособРасчета
	                      |	КОНЕЦ КАК СпособРасчета
	                      |ИЗ
	                      |	Справочник.Организации КАК Организации
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.УстановкаПараметровУчетаНоменклатуры.СпособыРасчетаСебестоимостиВФормах КАК УстановкаПараметровУчетаНоменклатурыСпособыРасчетаСебестоимостиВФормах
	                      |			ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	                      |				МАКСИМУМ(УстановкаПараметровУчетаНоменклатуры.Дата) КАК Дата
	                      |			ИЗ
	                      |				Документ.УстановкаПараметровУчетаНоменклатуры КАК УстановкаПараметровУчетаНоменклатуры
	                      |			ГДЕ
	                      |				УстановкаПараметровУчетаНоменклатуры.Дата <= &Дата
	                      |				И УстановкаПараметровУчетаНоменклатуры.Проведен) КАК ВложенныйЗапрос
	                      |			ПО (ВложенныйЗапрос.Дата = УстановкаПараметровУчетаНоменклатурыСпособыРасчетаСебестоимостиВФормах.Ссылка.Дата)
	                      |		ПО (Организации.Ссылка = УстановкаПараметровУчетаНоменклатурыСпособыРасчетаСебестоимостиВФормах.Организация
	                      |				ИЛИ УстановкаПараметровУчетаНоменклатурыСпособыРасчетаСебестоимостиВФормах.Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
	                      |ГДЕ
	                      |	Организации.Ссылка = &Организация
	                      |
	                      |УПОРЯДОЧИТЬ ПО
	                      |	ВЫБОР
	                      |		КОГДА Организации.Ссылка = УстановкаПараметровУчетаНоменклатурыСпособыРасчетаСебестоимостиВФормах.Организация
	                      |			ТОГДА 0
	                      |		ИНАЧЕ 1
	                      |	КОНЕЦ");*/
			//Запрос.УстановитьПараметр("Дата",Дата);
			//Запрос.УстановитьПараметр("Организация",Организация);
			//Выборка = Запрос.Выполнить().Выбрать();
			/*;
	Выборка.Следующий();*/
			//СпособРасчета = Выборка.СпособРасчета;
			/*//Если ипользуется расширенная аналитика в режиме отличном от "Упр. и регл. учет" то себестоимость по данным упр. учета получать нельзя
*/
			if(true/*глЗначениеПеременной("ИспользоватьРасширеннуюАналитикуУчетаНоменклатурыИЗатрат") 
	  И (глЗначениеПеременной("ДатаНачалаИспользованияРасширеннойАналитикиУчетаНоменклатурыИЗатрат") <= Дата) 
	  И (СпособРасчета = Перечисления.СпособыРасчетаСебестоимостиВФормах.ПоДаннымУправленческогоУчета)
	  И НЕ ИспользуетсяУправленческийУчетЗатрат()*/)
			{
				//СпособРасчета = Перечисления.СпособыРасчетаСебестоимостиВФормах.ПоДаннымБухгалтерскогоУчета;
			}
			return null;
		}
		// Процедура - 	дополняет запрос информацией о затратах по данным расширенной аналитики
		// Параметры:
		//  ДокументСсылка - ссылка на документ,
		//  Запрос - запрос, который нужно дополнять,
		//  ВидУчета - строка, содержащую "Упр" для упр. учета и "Регл" для регламентированного учета,
		//  КоэффициентПересчетаВВалюту - число, коэффициент предназначен для пересчета из валюты упр. учета в валюту регл. учета
		//

		public void ДополнитьЗапросЗатратамиРасширеннаяАналитика(/*ДокументСсылка, Запрос, ВидУчета, КоэффициентПересчетаВВалюту*/)
		{
			//ИспользоватьОпределениеСчетовПриПроведенииДокументов = СчетаУчетаВДокументах.ИспользоватьОпределениеСчетовПриПроведенииДокументов(ДокументСсылка.Дата);
			/*//Для этого режима доступны данные обоих учетов
*/
			if(true/*ВидУчета = "Упр"*/)
			{
				//ИмяРегистра = "УчетЗатрат";
			}
			//Запрос.УстановитьПараметр("КоэффициентПересчетаВВалюту", КоэффициентПересчетаВВалюту);
			//Запрос.УстановитьПараметр("НачалоМесяца", НачалоМесяца(ДокументСсылка.Дата));
			//Запрос.УстановитьПараметр("КонецМесяца", КонецМесяца(ДокументСсылка.Дата));
			//СтруктураИзмерений = Новый Структура("Организация, СчетУчета, Склад, Затрата, ХарактеристикаЗатраты, СерияЗатраты, Качество, СтатусПартии");
			//РасширеннаяАналитикаУчета.ПолучитьИспользуемыеИзмерения(СтруктураИзмерений, ИмяРегистра = "УчетЗатрат");
			if(true/*Найти(Запрос.Текст,"ТаблицаСебестоимостиОбороты") <> 0*/)
			{
				//СтруктраИзмеренийЗатрат = Новый Структура();
				//СтруктраИзмеренийЗатрат.Вставить("Организация",	?(СтруктураИзмерений.Организация,"КлючАналитикаВидаУчета.Организация","""Не используется"""));
				/*СтруктраИзмеренийЗатрат.Вставить("СчетУчета",	?(СтруктураИзмерений.СчетУчета
							И НЕ ИспользоватьОпределениеСчетовПриПроведенииДокументов,"КлючАналитикаВидаУчета.СчетУчета","""Не используется"""));*/
				//СтруктраИзмеренийЗатрат.Вставить("Склад",		?(СтруктураИзмерений.Склад,"КлючАналитикаВидаУчета.Склад","""Не используется"""));
				//СтруктраИзмеренийЗатрат.Вставить("Номенклатура", 				?(СтруктураИзмерений.Затрата,"КлючАналитикаУчетаЗатрат.Затрата","""Не используется"""));
				//СтруктраИзмеренийЗатрат.Вставить("ХарактеристикаНоменклатуры", 	?(СтруктураИзмерений.ХарактеристикаЗатраты,"КлючАналитикаУчетаЗатрат.ХарактеристикаЗатраты","""Не используется"""));
				//СтруктраИзмеренийЗатрат.Вставить("СерияНоменклатуры", 			?(СтруктураИзмерений.СерияЗатраты,"КлючАналитикаУчетаЗатрат.СерияЗатраты","""Не используется"""));
				//СтруктраИзмеренийЗатрат.Вставить("Качество", 					?(СтруктураИзмерений.Качество,"КлючАналитикаУчетаЗатрат.Качество","""Не используется"""));
				//СтруктраИзмеренийЗатрат.Вставить("СтатусПартии", ?(СтруктураИзмерений.СтатусПартии,"КлючАналитикаУчетаПартий.СтатусПартии","""Не используется"""));
				/*//Добавим только те поля и группировки, которые используются в основном запросе
*/
				//СписокПолей = "";
				//СписокГруппировок = "";
				/*ТекстЗапросаПоЗатратам = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
		                         |	СУММА(ВложенныйЗапрос.Количество) КАК Количество,
		                         |	СУММА(ВложенныйЗапрос.Стоимость*&КоэффициентПересчетаВВалюту) КАК Стоимость,
								 |	ВложенныйЗапрос.Регистратор" + СписокПолей + "
		                         |ПОМЕСТИТЬ ТаблицаСебестоимостиОбороты
		                         |ИЗ
		                         |	(ВЫБРАТЬ
		                         |		УчетЗатрат.АналитикаВидаУчета КАК АналитикаВидаУчета,
		                         |		УчетЗатрат.АналитикаУчетаЗатрат КАК АналитикаУчетаЗатрат,
		                         |		УчетЗатрат.АналитикаУчетаПартий КАК АналитикаУчетаПартий,
		                         |		УчетЗатрат.АналитикаРаспределенияЗатрат КАК АналитикаРаспределенияЗатрат,
		                         |		СУММА(УчетЗатрат.Количество) КАК Количество,
		                         |		СУММА(ВЫБОР КОГДА УчетЗатратОбороты.КоличествоРасход = 0
								 |			ТОГДА 0
								 |			ИНАЧЕ УчетЗатрат.Количество*УчетЗатратОбороты.СтоимостьРасход/УчетЗатратОбороты.КоличествоРасход
								 |			КОНЕЦ) КАК Стоимость,
		                         |		УчетЗатрат.Регистратор КАК Регистратор
		                         |	ИЗ
		                         |		РегистрНакопления." + ИмяРегистра + " КАК УчетЗатрат
		                         |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления." + ИмяРегистра + ".Обороты(&НачалоМесяца, &КонецМесяца, , ) КАК УчетЗатратОбороты
		                         |			ПО УчетЗатрат.АналитикаВидаУчета = УчетЗатратОбороты.АналитикаВидаУчета
		                         |				И УчетЗатрат.АналитикаУчетаЗатрат = УчетЗатратОбороты.АналитикаУчетаЗатрат
		                         |				И УчетЗатрат.АналитикаУчетаПартий = УчетЗатратОбороты.АналитикаУчетаПартий
		                         |				И УчетЗатрат.АналитикаРаспределенияЗатрат = УчетЗатратОбороты.АналитикаРаспределенияЗатрат
		                         |	ГДЕ
		                         |		УчетЗатрат.Регистратор = &Регистратор
								 |		И УчетЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
		                         |	
		                         |	СГРУППИРОВАТЬ ПО
		                         |		УчетЗатрат.АналитикаВидаУчета,
		                         |		УчетЗатрат.АналитикаУчетаЗатрат,
		                         |		УчетЗатрат.АналитикаУчетаПартий,
		                         |		УчетЗатрат.АналитикаРаспределенияЗатрат,
		                         |		УчетЗатрат.Регистратор) КАК ВложенныйЗапрос
		                         |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК КлючАналитикаВидаУчета
		                         |		ПО ВложенныйЗапрос.АналитикаВидаУчета = КлючАналитикаВидаУчета.Ссылка
		                         |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК КлючАналитикаУчетаЗатрат
		                         |		ПО ВложенныйЗапрос.АналитикаУчетаЗатрат = КлючАналитикаУчетаЗатрат.Ссылка
		                         |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК КлючАналитикаУчетаПартий
		                         |		ПО ВложенныйЗапрос.АналитикаУчетаПартий = КлючАналитикаУчетаПартий.Ссылка
		                         |
		                         |СГРУППИРОВАТЬ ПО
		                         |	ВложенныйЗапрос.Регистратор" + СписокГруппировок;*/
			}
			if(true/*ТекстЗапросаПоЗатратам <> ""*/)
			{
				/*Запрос.Текст = ТекстЗапросаПоЗатратам + "
		|;
		|" + Запрос.Текст;*/
			}
		}
		// Процедура - 	дополняет запрос информацией о затратах по данным партионного учета
		// Параметры:
		//  ДокументСсылка - ссылка на документ,
		//  Запрос - запрос, который нужно дополнять,
		//  ВидУчета - строка, содержащую "Упр" для упр. учета и "Регл" для регламентированного учета,
		//  КоэффициентПересчетаВВалюту - число, коэффициент предназначен для пересчета из валюты упр. учета в валюту регл. учета
		//

		public void ДополнитьЗапросЗатратамиПартионныйУчет(/*ДокументСсылка, Запрос, ВидУчета, КоэффициентПересчетаВВалюту*/)
		{
			//ИспользоватьОпределениеСчетовПриПроведенииДокументов = СчетаУчетаВДокументах.ИспользоватьОпределениеСчетовПриПроведенииДокументов(ДокументСсылка.Дата);
			//ТекстЗапросаПоЗатратам = "";
			if(true/*ВидУчета = "Упр"*/)
			{
				//ИмяРегистра = "ПартииТоваровНаСкладах";
			}
			//Запрос.УстановитьПараметр("КоэффициентПересчетаВВалюту", КоэффициентПересчетаВВалюту);
			if(true/*Найти(Запрос.Текст,"ТаблицаСебестоимостиОбороты") <> 0*/)
			{
				//МассивИзмеренийЗатрат = Новый Массив();
				//МассивИзмеренийЗатрат.Добавить("Организация");
				//МассивИзмеренийЗатрат.Добавить("Номенклатура");
				//МассивИзмеренийЗатрат.Добавить("СчетУчета");
				//МассивИзмеренийЗатрат.Добавить("Склад");
				//МассивИзмеренийЗатрат.Добавить("ДокументОприходования");
				//МассивИзмеренийЗатрат.Добавить("ХарактеристикаНоменклатуры");
				//МассивИзмеренийЗатрат.Добавить("СерияНоменклатуры");
				//МассивИзмеренийЗатрат.Добавить("Заказ");
				//МассивИзмеренийЗатрат.Добавить("Качество");
				//МассивИзмеренийЗатрат.Добавить("СтатусПартии");
				/*//Добавим только те поля и группировки, которые используются в основном запросе
*/
				//СписокПолей = "";
				//СписокГруппировок = "";
				/*ТекстЗапросаПоЗатратам = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
		                         |	СУММА(ПартииТоваровНаСкладах.Количество) КАК Количество,
		                         |	СУММА(ПартииТоваровНаСкладах.Стоимость*&КоэффициентПересчетаВВалюту) КАК Стоимость,
								 |	ПартииТоваровНаСкладах.Регистратор" + СписокПолей + " 
		                         |ПОМЕСТИТЬ ТаблицаСебестоимостиОбороты
		                         |ИЗ
		                         |	РегистрНакопления." + ИмяРегистра + " КАК ПартииТоваровНаСкладах
		                         |ГДЕ
		                         |	ПартииТоваровНаСкладах.Регистратор = &Регистратор
								 |	И ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
		                         |
		                         |СГРУППИРОВАТЬ ПО
								 |	ПартииТоваровНаСкладах.Регистратор" + СписокГруппировок;*/
			}
			if(true/*ТекстЗапросаПоЗатратам <> ""*/)
			{
				/*Запрос.Текст = ТекстЗапросаПоЗатратам + "
		|;
		|" + Запрос.Текст;*/
			}
		}
		// Процедура - 	дополняет запрос информацией о затратах по типу цен
		// Параметры:
		//  ДокументСсылка - ссылка на документ,
		//  Запрос - запрос, который нужно дополнять,
		//  ТипЦен - тип цен из которого нужно получать себестоимость.
		//

		public void ДополнитьЗапросЗатратамиПоТипуЦен(/*ДокументСсылка, Запрос, ТипЦен*/)
		{
			//ТекстЗапросаПоЗатратам = "";
			//Запрос.УстановитьПараметр("ТипЦен",ТипЦен);
			//Запрос.УстановитьПараметр("Дата", ДокументСсылка.Дата);
			if(true/*Найти(Запрос.Текст,"ТаблицаСебестоимостиОбороты") <> 0*/)
			{
				/*ТекстЗапросаПоЗатратам = "ВЫБРАТЬ
						|			ЦеныНоменклатуры.Номенклатура,
						|			ЦеныНоменклатуры.ХарактеристикаНоменклатуры,
						|			(ЦеныНоменклатуры.Цена 
						|			* ЕСТЬNULL(КурсыВалют.Курс, 0)
						|			* (ВЫБОР КОГДА ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент ЕСТЬ NULL 
						|					ИЛИ ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент = 0 ТОГДА
						|				1
						|			ИНАЧЕ
						|				ЦеныНоменклатуры.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / 
						|				ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент
						|			КОНЕЦ)
						|			* ЕСТЬNULL(КурсВалютыУчета.Кратность, 1)
						|			/ ( ЕСТЬNULL(КурсВалютыУчета.Курс, 1)
						|				* (ВЫБОР КОГДА КурсыВалют.Кратность ЕСТЬ NULL ИЛИ КурсыВалют.Кратность = 0 Тогда
						|					1
						|				ИНАЧЕ 
						|					КурсыВалют.Кратность
						|				КОНЕЦ) 
						|				)
						|			) КАК Стоимость,
						|			1 КАК Количество,
						|			&Регистратор КАК Регистратор,
						|			""Не используется"" КАК СерияНоменклатуры,
						|			""Не используется"" КАК Качество,
						|			""Не используется"" КАК СчетУчета
						|ПОМЕСТИТЬ ТаблицаСебестоимостиОбороты
						|			ИЗ
						|				РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,
						|					ТипЦен = &ТипЦен) КАК ЦеныНоменклатуры
						|				
						|				ЛЕВОЕ СОЕДИНЕНИЕ
						|					РегистрСведений.КурсыВалют.СрезПоследних(&Дата) КАК КурсыВалют
						|				ПО 
						|					КурсыВалют.Валюта = ЦеныНоменклатуры.Валюта
						|				
						|				ЛЕВОЕ СОЕДИНЕНИЕ
						|					РегистрСведений.КурсыВалют.СрезПоследних(&Дата, 
						|						ВАЛЮТА В (
						|							ВЫБРАТЬ
						|								Константы.ВалютаРегламентированногоУчета
						|							ИЗ
						|								Константы КАК Константы
						|							)
						|						) КАК КурсВалютыУчета
						|				ПО ИСТИНА";*/
			}
			if(true/*ТекстЗапросаПоЗатратам <> ""*/)
			{
				/*Запрос.Текст = ТекстЗапросаПоЗатратам + "
		|;
		|" + Запрос.Текст;*/
			}
		}
		// Функция возвращает таблицу для обработок заполнения и печатных форм дополненную информацией о себестоимости
		//
		// Параметры:
		//  ДокументСсылка - ссылка на документ,
		//  ТекстЗапроса - текст запроса получающего данные для обработки заполнения или печатной формы,
		//  СтруктраПараметров - структура, содержащая параметры запроса
		//
		// Возвращаемое значение:
		//  ТаблицаЗначений - содержит результат выполнения переданного запроса
		//

		public object ПолучитьТаблицуЗатратДляПечатиИЗаполненияДокументов(/*ДокументСсылка, ТекстЗапроса, СтруктраПараметров*/)
		{
			//Запрос = Новый Запрос();
			//Запрос.Текст = ТекстЗапроса;
			//СпособРасчета = ПолучитьСпособРасчетаСебестоимостиВФормах(ДокументСсылка.Дата, ДокументСсылка.Организация);
			if(true/*ТипЗНЧ(СпособРасчета) = Тип("ПеречислениеСсылка.СпособыРасчетаСебестоимостиВФормах")*/)
			{
				if(true/*СпособРасчета = Перечисления.СпособыРасчетаСебестоимостиВФормах.ПоДаннымБухгалтерскогоУчета*/)
				{
					//ВидУчета = "Регл";
					//КоэффициентПересчетаВВалюту = 1;
				}
				if(true/*глЗначениеПеременной("ИспользоватьРасширеннуюАналитикуУчетаНоменклатурыИЗатрат") 
		  И (глЗначениеПеременной("ДатаНачалаИспользованияРасширеннойАналитикиУчетаНоменклатурыИЗатрат") <= ДокументСсылка.Дата)*/)
				{
					//ДополнитьЗапросЗатратамиРасширеннаяАналитика(ДокументСсылка, Запрос, ВидУчета, КоэффициентПересчетаВВалюту);
				}
			}
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ ФОРМИРУЮЩИЕ ДВИЖЕНИЯ ПО ПРИНЯТЫМ ТМЦ ДЛЯ РА
		// Процедура - 	обработчик подписки на событие
		//  Движения - коллекция движений документа.
		//

		public void ПриПроведенииРасширеннаяАналитикаЗапасовУчетПринятыхТМЦОбработкаПроведения(/*Источник, Отказ, РежимПроведения*/)
		{
			if(true/*ИспользуетсяРасширеннаяАналитикаУчета(Источник.Дата)
	 И Источник.ДополнительныеСвойства.Свойство("СтруктураШапкиДокумента")
	 И Источник.ДополнительныеСвойства.Свойство("СтруктураТабличныхЧастей")*/)
			{
				//СтруктураИсточника = Новый Структура();
				//СтруктураИсточника.Вставить("мСтруктураШапкиДокумента",Источник.ДополнительныеСвойства.СтруктураШапкиДокумента);
				//СтруктураИсточника.Вставить("мСтруктураТабличныхЧастей",Источник.ДополнительныеСвойства.СтруктураТабличныхЧастей);
				//СтруктураИсточника.Вставить("Ссылка",Источник.Ссылка);
				//СтруктураИсточника.Вставить("Дата",Источник.Дата);
				//СтруктураИсточника.Вставить("ОтражатьВУправленческомУчете", Истина);
				//СтруктураИсточника.Вставить("ОтражатьВБухгалтерскомУчете",Ложь);
				//СтруктураИсточника.Вставить("ОтражатьВНалоговомУчете",Ложь);
				//ЗаполнитьЗначенияСвойств(СтруктураИсточника, Источник);
				if(true/*Источник.Движения.Хозрасчетный.Модифицированность()*/)
				{
					//Источник.Движения.Хозрасчетный.Записать(Ложь);
				}
				if(true/*Источник.Движения.Налоговый.Модифицированность()*/)
				{
					//Источник.Движения.Налоговый.Записать(Ложь);
				}
				//УправлениеЗапасамиРасширеннаяАналитика.СформироватьДвиженияПоУчетуПринятыхТМЦ(СтруктураИсточника, Отказ, РежимПроведения);
			}
		}

		public object ПолучитьТаблицуСобственныхТоваров(/*СтруктураШапкиДокумента, ТаблицаПоТоварам, КопироватьТаблицу = Ложь*/)
		{
			if(true/*ИспользуетсяРасширеннаяАналитикаУчета(СтруктураШапкиДокумента.Дата)*/)
			{
				if(true/*КопироватьТаблицу*/)
				{
				}
			}
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЧИЕ ПРОЦЕДУРЫ И ФУНКЦИИ
		// Процедура контролирует лимиты возвратной тары, передаваемой покупателю по переданному документу
		// и его табличной части. В случае превышения лимита выставляется флаг отказа и выдается сообщение.
		//
		// Параметры:
		//  ДокументОбъект    - объект проводимого документа,
		//  СтруктураШапкиДокумента - структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
		//  Отказ             - флаг отказа в проведении,
		//  Заголовок         - строка, заголовок сообщения об ошибке проведения.
		//

		public void КонтрольЛимитовВозвратнойТарыПоставщика(/*ДокументОбъект, СтруктураШапкиДокумента, Отказ, Заголовок*/)
		{
			//ИмяТабличнойЧасти  = "ВозвратнаяТара";
			if(true/*ДокументОбъект.ВозвратнаяТара.Количество() = 0*/)
			{
			}
			//ИмяДокумента       = ДокументОбъект.Метаданные().Имя;
			//ИмяТаблицы         = ИмяДокумента + "." + СокрЛП(ИмяТабличнойЧасти);
			/*// Текст вложенного запроса, ограничивающего номенклатуру при получении остатков
*/
			/*ТекстЗапросаСписокНоменклатуры = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Номенклатура 
	|ИЗ
	|	Документ." + ИмяТаблицы +"
	|ГДЕ Ссылка = &ДокументСсылка";*/
			//Запрос = Новый Запрос;
			/*// Установим параметры запроса
*/
			/*//Ссылка извлекается из ДокументОбъект
*/
			/*//Значение СтрукрураШапкиДокумента.Ссылка использовать нельзя, 
*/
			/*//	т.к. для документа КорректировкаЗаказаПоставщику там хранится ссылка на корректируемый заказ
*/
			//Запрос.УстановитьПараметр("ДокументСсылка",          ДокументОбъект.Ссылка);
			//Запрос.УстановитьПараметр("ДоговорКонтрагента",   СтруктураШапкиДокумента.ДоговорКонтрагента);
			//Запрос.УстановитьПараметр("СтатусПолучения",         Перечисления.СтатусыПолученияПередачиТоваров.ВозвратнаяТара);
			/*Запрос.Текст = "
	|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
	|	Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
	|	Док.Номенклатура.ЕдиницаХраненияОстатков			   КАК ЕдиницаХраненияОстатков,
	|	СУММА(Док.Количество)                                  КАК ДокументКоличество, 
	|	ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       КАК ОстатокКоличество,
	|	МИНИМУМ(Лимиты.ЛимитПоставщика)                        КАК Лимит 
	|   
	|ИЗ 
	|	Документ." + ИмяТаблицы + " КАК Док
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрНакопления.ТоварыПолученные.Остатки(,
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")
	|	И ДоговорКонтрагента = &ДоговорКонтрагента
	|	И СтатусПолучения       = &СтатусПолучения
	|	) КАК Остатки
	|ПО 
	|	Док.Номенклатура        = Остатки.Номенклатура
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрСведений.ЛимитыВозвратнойТары.СрезПоследних(,
	|		Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")
	|	И ДоговорКонтрагента = &ДоговорКонтрагента
	|	) КАК Лимиты
	|ПО 
	|	Док.Номенклатура                = Лимиты.Номенклатура
	|
	|ГДЕ
	|	Док.Ссылка  =  &ДокументСсылка
	|	И Док.Количество > 0
	|	И НЕ Лимиты.ЛимитПоставщика ЕСТЬ NULL
	|	И Лимиты.ЛимитПоставщика > 0
	|
	|СГРУППИРОВАТЬ ПО
	|
	|	Док.Номенклатура
	|
	|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) + СУММА(Док.Количество) > МИНИМУМ(Лимиты.ЛимитПоставщика)
	|
	|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыПолученные.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
	|";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				/*СтрокаСообщения = "По " + 
		ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление, "", "") +
		" по договору """ + СокрЛП(СтруктураШапкиДокумента.ДоговорКонтрагента) + """ превышен лимит возвратной тары.";*/
				/*ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения + Символы.ПС + Символы.Таб +
						   "Лимит " + (Выборка.Лимит) + " " + Выборка.ЕдиницаХраненияОстатков +
						   "; Получено ранее " + Выборка.ОстатокКоличество + " " + Выборка.ЕдиницаХраненияОстатков +
						   "; Заказано " + Выборка.ДокументКоличество + " " + Выборка.ЕдиницаХраненияОстатков, Ложь);*/
			}
			//;;
		}
		// КонтрольЛимитовВозвратнойТарыПоставщика()

		public object ОпределитьДоступностьРеквизитаДокументПоступленияВВозвратах(/*ДокументОбъект*/)
		{
			if(true/*ДокументОбъект.ОтражатьВУправленческомУчете*/)
			{
				//УчетнаяПолитикаУпр = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиУпр(ДокументОбъект.Дата, Ложь);
				if(true/*ЗначениеЗаполнено(УчетнаяПолитикаУпр)
		И УчетнаяПолитикаУпр.СпособОценкиМПЗ <> Перечисления.СпособыОценки.ПоСредней*/)
				{
				}
			}
			if(true/*ДокументОбъект.ОтражатьВБухгалтерскомУчете*/)
			{
				//УчетнаяПолитикаРегл = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиРегл(ДокументОбъект.Дата, ДокументОбъект.Организация, Ложь);
				if(true/*ЗначениеЗаполнено(УчетнаяПолитикаРегл)
		  И УчетнаяПолитикаРегл.СпособОценкиМПЗ <> Перечисления.СпособыОценки.ПоСредней*/)
				{
				}
			}
			return null;
		}

		public void ПриПроведенииРасширеннаяАналитикаЗапасовИзменениеСостоянияОбработкаПроведения(/*Источник, Отказ, РежимПроведения*/)
		{
			if(true/*ИспользуетсяРасширеннаяАналитикаУчета(Источник.Дата)
	 И Источник.ДополнительныеСвойства.Свойство("СтруктураШапкиДокумента")
	 И Источник.ДополнительныеСвойства.Свойство("СтруктураТабличныхЧастей")*/)
			{
				//СтруктураИсточника = Новый Структура();
				//СтруктураИсточника.Вставить("мСтруктураШапкиДокумента",Источник.ДополнительныеСвойства.СтруктураШапкиДокумента);
				//СтруктураИсточника.Вставить("мСтруктураТабличныхЧастей",Источник.ДополнительныеСвойства.СтруктураТабличныхЧастей);
				//СтруктураИсточника.Вставить("Ссылка",Источник.Ссылка);
				//СтруктураИсточника.Вставить("Дата",Источник.Дата);
				//СтруктураИсточника.Вставить("ОтражатьВУправленческомУчете", Истина);
				//СтруктураИсточника.Вставить("ОтражатьВБухгалтерскомУчете",Ложь);
				//СтруктураИсточника.Вставить("ОтражатьВНалоговомУчете",Ложь);
				//ЗаполнитьЗначенияСвойств(СтруктураИсточника, Источник);
				//СтруктураИсточника.Вставить("Движения",Источник.Движения);
				//СтруктураИсточника.Вставить("Движения",Новый Структура());
				//УправлениеЗапасамиРасширеннаяаналитика.РасширеннаяАналитикаЗапасовИзменениеСостояния(СтруктураИсточника, Отказ, РежимПроведения);
				//ТипДокумента = ТипЗНЧ(Источник.Ссылка);
				if(true/*ОтложенноеПроведениеДокументов.ИспользуетсяОтложенноеПроведение(Источник.ДополнительныеСвойства.СтруктураШапкиДокумента)
			И Источник.ДополнительныеСвойства.Свойство("ЭтапПроведения")*/)
				{
					if(true/*ТипДокумента = Тип("ДокументСсылка.ПоступлениеТоваровУслуг")
				ИЛИ ТипДокумента = Тип("ДокументСсылка.КорректировкаПоступления")
				ИЛИ ТипДокумента = Тип("ДокументСсылка.АвансовыйОтчет")*/)
					{
						/*// Для документов ПоступлениеТоваровУслуг, Корректировка поступления и АвансовыйОтчет 
*/
						/*// формируем движения по затратам при обычном проведении и не формируем при допроведении 
*/
					}
				}
			}
		}
		// Функция определяет применяется ли для документа расширенная аналитика
		//
		// Параметры:
		//  ДатаДокумента - дата документа
		//
		// Возвращаемое значение:
		//  Булево - Истина, если расширенная аналитика применяется
		//

		public object ИспользуетсяРасширеннаяАналитикаУчета(/*ДатаДокумента=Неопределено*/)
		{
			if(true/*глЗначениеПеременной("ИспользоватьРасширеннуюАналитикуУчетаНоменклатурыИЗатрат") 
		И ((НЕ ЗначениеЗаполнено(ДатаДокумента))
		  ИЛИ (НачалоДня(глЗначениеПеременной("ДатаНачалаИспользованияРасширеннойАналитикиУчетаНоменклатурыИЗатрат"))<=НачалоДня(ДатаДокумента)))*/)
			{
			}
			return null;
		}
		//ИспользуетсяРасширеннаяАналитикаУчета()
		// Функция определяет используется ли управленческий учет затрат
		//
		// Возвращаемое значение: булево

		public object ИспользуетсяУправленческийУчетЗатрат(/**/)
		{
			//Возврат глЗначениеПеременной("РежимИспользованияРасширеннойАналитикиУчетаНоменклатурыИЗатрат") = Перечисления.РежимыИспользованияРасширеннойАналитики.УправленческийИРегламентированныйУчет;
			return null;
		}
		// Процедура - обработчик события ПриЗаписи для документов которые не имеет смысл проводить по упр. учету для некоторых режимов расширенной аналитики
		//

		public void ПриЗаписиДокументовПоУпрУчетуРАПриЗаписи(/*Источник, Отказ*/)
		{
			if(true/*НЕ Источник.ОбменДанными.Загрузка*/)
			{
				if(true/*ИспользуетсяРасширеннаяАналитикаУчета(Источник.Дата)*/)
				{
					//РежимРА = глЗначениеПеременной("РежимИспользованияРасширеннойАналитикиУчетаНоменклатурыИЗатрат");
					if(true/*РежимРА = Перечисления.РежимыИспользованияРасширеннойАналитики.РегламентированныйУчет
			  ИЛИ РежимРА = Перечисления.РежимыИспользованияРасширеннойАналитики.РегламентированныйУчетСДополнительнойАналитикой*/)
					{
						if(true/*(ТипЗНЧ(Источник.Ссылка) = Тип("ДокументСсылка.ОтражениеЗарплатыВУпрУчете")
				  ИЛИ (Источник.ОтражатьВУправленческомУчете
				  	И (НЕ Источник.ОтражатьВБухгалтерскомУчете)))
				  И Источник.Проведен*/)
						{
							//Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Источник);
							/*ОбщегоНазначения.Сообщение(Заголовок + "
					|Установлен режим использования расширенной аналитики: " + РежимРА + ".
					|Для этого режима не имеет смысл проводить документы """ + Источник.Метаданные().Синоним + """ только по управленческому учету",СтатусСообщения.Внимание);*/
						}
					}
				}
			}
		}
	}
}
